有2张桌子,比方说:
group (id, name)
value (id, group_id, val, date)
需要从值表中获取所有行,其中上一行的val值小于当前行的值。
例子:
[id: 1, group_id: 1, val: 150, date: 2020-17-02]
[id: 2, group_id: 1, val: 200, date: 2020-17-03]
[id: 3, group_id: 2, val: 111, date: 2020-17-02]
[id: 4, group_id: 1, val: 500, date: 2020-17-01]
在sql查询之后,应该选择id = 2的行,因为 值 val = 150 (id=1) 小于 val = 200 (id=2) 且 id = 3(因为没有更多的记录 group_id = 2)
也就是粗略的说,需要对ORDER BY date DESC进行排序,遍历所有行,如果有找到同一行group_id和date小于当前行的行,则将此行作为a返回结果
试图做这样的事情:
SELECT * FROM value v1 ... AND WHERE EXISTS (SELECT * FROM value v2 WHERE v1.group_id = v2.group_id AND v1.id != v2.id AND v1.value > v2.value ORDER BY date DESC limit 1)
如果每个组在 values 中有 2 个值,并且如果有更多,那么在 EXISTS 中找到的行不可能正好在当前行之前
我希望我能清楚地解释一切,提前谢谢
你可以这样尝试:
结果: