1

2つの行の日付が4以下であるテーブルからすべての行を選択し、条件が一致しなくなったらすぐに停止します。つまり、diff> 4の降順で(下から)

注意:条件が4を超えると、それ以上一致しなくなり、単に停止します

つまり、5、6、7、8、9を選択する必要があります

テーブル

「 HAVING 」を使ってみましたが、ビッグデータが遅い

それを理解するのを手伝ってくれてありがとう。

4

1 に答える 1

3

ユーザー定義変数を使用して前の値を追跡し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でそれを参照してください。

于 2012-08-29T04:29:25.753 に答える