这是我在准备面试时发现的一个SQL问题。
如何有效地查找价值大于前一个记录的所有记录?
ID 1 2 3 4 5
value 6 5 10 8 30
答案 0 :(得分:2)
您可以使用自联接。只要问题肯定只是将当前记录与之前的记录(而不是之前的所有记录)进行比较。
SELECT
t1.*
FROM
table t1
INNER JOIN table t2
ON t1.id = t2.id + 1
WHERE
t1.value > t2.value
答案 1 :(得分:0)
如果ID是连续的,没有间隙,JNevill的答案是有效的。如果可能缺少ID,这可能会更好:
SELECT t1.*
FROM (
SELECT t.*, value > @prevValue AS greater, @prevValue := value
FROM (SELECT *
FROM YourTable
ORDER BY id) AS t
CROSS JOIN (SELECT @prevValue := null) AS init) AS t1
WHERE greater = 1