次の構造の MySQL テーブルがあります。
飲料_ログ(ID、ユーザーID、飲料_ID、タイムスタンプ)
ユーザー (ID 1) が飲料 (ID 1) を毎日少なくとも 5 回記録する連続した日の最大ストリークを計算しようとしています。これは、次のようにビューを使用して実行できると確信しています。
CREATE or REPLACE VIEW daycounts AS
SELECT count(*) AS n, DATE(timestamp) AS d FROM beverages_log
WHERE users_id = '1' AND beverages_id = 1 GROUP BY d;
CREATE or REPLACE VIEW t AS SELECT * FROM daycounts WHERE n >= 5;
SELECT MAX(streak) AS current FROM ( SELECT DATEDIFF(MIN(c.d), a.d)+1 AS streak
FROM t AS a LEFT JOIN t AS b ON a.d = ADDDATE(b.d,1)
LEFT JOIN t AS c ON a.d <= c.d
LEFT JOIN t AS d ON c.d = ADDDATE(d.d,-1)
WHERE b.d IS NULL AND c.d IS NOT NULL AND d.d IS NULL GROUP BY a.d) allstreaks;
ただし、このチェックを実行するたびに異なるユーザーのビューを繰り返し作成するのは、かなり非効率的です。ビューを作成したり、同じサブクエリを繰り返し呼び出したりすることなく、単一のクエリでこの計算を実行する方法は MySQL にありますか?