我想要一个SQL语句,我会在第一行(前一个因为ID,日期时间或其他任何内容)的每一行上获得多列匹配的每一行。任何想法或我必须使用DB + app组合?
示例表:
id col1 col2 col3
1 1 2 3
2 1 2 4
3 1 2 5
4 2 2 1
结果(匹配的cols是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
谢谢。
答案 0 :(得分:1)
我建议使用这样的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
不要忘记使用正确的索引,否则你可以在这里轻松创建一个非常缓慢的瓶颈。