日付に基づいてレコードのグループの最新のレコードのみを取得するクエリを作成しようとしています。
テーブルのレイアウトは次のとおりです。
| date | category | action | label | label2 | count_today | count_total | period |
主キーは、列、、、、、、date
に基づいています。フォーマットがあり、期間は、、、の値を持つことができます。category
action
label
label2
period
date
yyyy-mm-dd
Day
Week
month
のユニークな組み合わせごとcategory | action | label | label2
に、最新の日付のレコードが必要です。
これに対する私の最初の試みはこれでした:
SELECT * FROM `statistic`
WHERE
(action='total' OR action='' OR category='user')
AND
(period='day'
OR (period='week' AND DATEDIFF(now(), `date`) > 30)
OR (period = 'Month' AND DATEDIFF(now(), `date`) > 7*26)
)
GROUP BY category, action, label, label2
ORDER BY date DESC
このクエリの問題は、ORDERBYの前にGROUPBYを実行し、誤ったレコードが返されることです。
検索したところ、私が欲しいのはグループ単位の最大クエリと呼ばれるものであることがわかりました。
私の次の試みはこれでした:
SELECT s1.* FROM `statistic` AS s1
LEFT JOIN statistic AS s2
ON
s1.category = s2.category
AND s1.action = s2.action
AND s1.label = s2.label
AND s1.label2 = s2.label2
AND s1.date > s2.date
WHERE
(s1.action='total' OR s1.action='' OR s1.category='user')
AND
(s1.period='day'
OR (s1.period='week' AND DATEDIFF(now(), s1.`date`) > 30)
OR (s1.period = 'Month' AND DATEDIFF(now(), s1.`date`) > 7*26)
)
GROUP BY category, action, label, label2
しかし、このクエリでも正しい結果が得られません(最初のクエリと似ています)。
必要なデータを取得する方法はありますか?