1
我想構建一個查詢,只獲取基於日期的一組記錄上的最新記錄。Groupwise最大查詢獲取記錄的最新日期
表的佈局是以下:
| 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
與此查詢的問題是,它的GROUP BY ORDER BY之前,導致要返回不正確的記錄。
搜索後,我發現,我想所謂的group-wise maximum查詢。
我的下一個嘗試是這樣的:
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
但此查詢不給我正確的結果是(它類似於第一個查詢)。
任何線索我如何能得到我需要的數據?
不,我不是指的你的答案。無論如何,刪除我的,因爲你的是一個更優雅。 – fancyPants
夠公平的:)但我不相信你的編輯,因爲這個問題指出:「對於'category | action | label | label2'的每個獨特組合,我需要記錄最新的日期。」(我認爲這些過濾器被OP應用於錯誤的嘗試來達到這個解決方案)。我建議至少分離出一個單獨的查詢。 – eggyal
夠公平的,優雅的主人:) – fancyPants