繁体   English   中英

如何在MySQL中将上一行连接到多列中的每一行匹配

[英]How to join previous row to each row on multiple columns match in MySQL

我想有一个SQL语句,在该语句中,我将为每一行获得第一行的前一行(由于ID,日期时间或其他原因而为第一行),该行与多列匹配。 有什么想法或者我必须使用DB + app组合?

示例表:

id  col1  col2  col3
1   1     2     3
2   1     2     4
3   1     2     5
4   2     2     1

结果(匹配的列为col1和col2,按ID排序):

id  col1  col2  col3  priorID  priorCol1  priorCol2  priorCol3
1   1     2     3     n        n          n          n
2   1     2     4     1        1          2          3
3   1     2     5     2        1          2          4
4   2     2     1     n        n          n          n

谢谢。

我建议使用这样的SQL函数:

DELIMITER $$

CREATE FUNCTION my_func (idx INT) 
 RETURNS INT
 READS SQL DATA
BEGIN
 RETURN (
  SELECT t2.ID 
  FROM test AS t1 
  LEFT JOIN test AS t2 
  ON (t1.COL1=t2.COL1 AND t1.COL2=t2.COL2 AND t1.ID > t2.ID) 
  WHERE t1.ID = idx
  ORDER BY t2.ID DESC
  LIMIT 1
 );
    END$$

DELIMITER;

然后在您的SQL查询中使用它

SELECT * FROM test AS t1 
LEFT JOIN test as t2 ON (t2.ID=my_func(t1.ID))
ORDER BY t1.ID

不要忘记使用适当的索引,否则您可以在此处轻松创建一个非常缓慢的瓶颈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM