我想从表格中选择两行之间不同的日期为4或更少的所有行,并在条件不匹配时立即停止,即diff> 4按降序排列,即(从底部)
小心:一旦条件是> 4它不会简单地进一步匹配 停止
即必须选择5,6,7,8,9
我尝试使用“ HAVING ”,但它在大数据上的速度很慢
先谢谢大家帮忙搞清楚。
答案 0 :(得分:3)
您可以使用user-defined variables跟踪之前的updated_at
值(在我的示例中,在@t
中),然后根据之前的记录是否需要记录是否需要记录期望的(@b
),如果是的话,最后一个日期与当前日期之间的差异:
SELECT id, amount, updated_at
FROM (
SELECT my_table.*,
@b:=IF(@b, DATEDIFF(@t,updated_at)<=4, FALSE) okay,
@t:=updated_at
FROM my_table, (SELECT @b:=TRUE, @t:=MAX(updated_at) FROM my_table) init
ORDER BY updated_at DESC
) t
WHERE okay
ORDER BY updated_at, id
在sqlfiddle上查看。