我想从表中选择两行之间的日期差异为 4 或更少的所有行,并在条件不匹配时立即停止,即 diff > 4 按降序排列,即(从底部开始)
警告:一旦条件大于 4,它将不再匹配它只是停止
即它必须选择 5,6,7,8,9
我尝试使用“ HAVING ”,但在大数据上速度很慢
提前感谢大家帮助解决这个问题。
我想从表中选择两行之间的日期差异为 4 或更少的所有行,并在条件不匹配时立即停止,即 diff > 4 按降序排列,即(从底部开始)
警告:一旦条件大于 4,它将不再匹配它只是停止
即它必须选择 5,6,7,8,9
我尝试使用“ HAVING ”,但在大数据上速度很慢
提前感谢大家帮助解决这个问题。
您可以使用用户定义的变量来跟踪以前的updated_at
值(在下面的示例中,in ) ,@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上查看。