1

我想从表中选择两行之间的日期差异为 4 或更少的所有行,并在条件不匹配时立即停止,即 diff > 4 按降序排列,即(从底部开始)

警告:一旦条件大于 4,它将不再匹配它只是停止

即它必须选择 5,6,7,8,9

桌子

我尝试使用“ HAVING ”,但在大数据上速度很慢

提前感谢大家帮助解决这个问题。

4

1 回答 1

3

您可以使用用户定义的变量来跟踪以前的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上查看。

于 2012-08-29T04:29:25.753 回答