2つの行の日付が4以下であるテーブルからすべての行を選択し、条件が一致しなくなったらすぐに停止します。つまり、diff> 4の降順で(下から)
注意:条件が4を超えると、それ以上一致しなくなり、単に停止します
つまり、5、6、7、8、9を選択する必要があります
「 HAVING 」を使ってみましたが、ビッグデータが遅い
それを理解するのを手伝ってくれてありがとう。
2つの行の日付が4以下であるテーブルからすべての行を選択し、条件が一致しなくなったらすぐに停止します。つまり、diff> 4の降順で(下から)
注意:条件が4を超えると、それ以上一致しなくなり、単に停止します
つまり、5、6、7、8、9を選択する必要があります
「 HAVING 」を使ってみましたが、ビッグデータが遅い
それを理解するのを手伝ってくれてありがとう。
ユーザー定義変数を使用して前の値を追跡し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でそれを参照してください。