选择所有行,直到日期差异从底部为4

时间:2012-08-29 04:03:30

标签: mysql

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

  小心:一旦条件是> 4它不会简单地进一步匹配   停止

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

table

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

先谢谢大家帮忙搞清楚。

1 个答案:

答案 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上查看。