2011-12-28 118 views
1

我試圖檢索過去7天內每天的最近記錄。但是,每個返回的記錄與updatedAt(最近的一天)具有相同的日期,但其他數據的確會正確返回。我怎樣才能改變我的SQL查詢給我每個記錄的正確日期?檢索過去7天當天的最後一條記錄

SELECT pl_scores.* FROM pl_scores 
INNER JOIN (SELECT MAX(updatedAt) AS maxUpdatedAt FROM pl_scores 
GROUP BY DATE(updatedAt)) as Lookup ON Lookup.MaxUpdatedAt = pl_scores.updatedAt 
WHERE pl_scores.pid = 977 ORDER BY pl_scores.updatedAt ASC LIMIT 7 
+0

哪些列在您的表中?你應該像SELECT tab1.col1,tab1.col2 .... tab2.colN,max(updatedAt)那樣嘗試類似於max FRom tab1連接tab2(不確定綁定).... group by max ORDER BY pl_scores。已更新ASC限制7。 – Kousalik 2011-12-28 10:00:47

回答

0

這種取決於你的db如何存儲時間/日期以及爲什麼/何時/如何改變。你有多少時間/日期字段以及如何存儲?

0
SELECT pl_scores.* FROM pl_scores 
INNER JOIN (SELECT MAX(updatedAt) AS maxUpdatedAt, id FROM pl_scores WHERE updatedAT >= DATE_SUB(updatedAt, INTERVAL 1 WEEK) 
GROUP BY DAY(updatedAt)) as Lookup ON Lookup.id = pl_scores.id 
WHERE pl_scores.pid = 977 ORDER BY pl_scores.updatedAt ASC LIMIT 7 
2

你必須以GROUP BYDAY(updatedAT)你的結果,以獲得MAX的每一天 - 也加入WHERE updatedAT >= DATE_SUB(updatedAt, INTERVAL 1 WEEK)條款,以確保你沒有得到超過一週舊的價值觀。

此外,改變連接和使用id列,以避免情況下2個記錄具有相同updatedAt

SELECT pl_scores.* FROM pl_scores 
INNER JOIN 
(SELECT MAX(updatedAt) AS maxUpdatedAt, id FROM pl_scores 
    WHERE updatedAT >= DATE_SUB(updatedAt, INTERVAL 1 WEEK) 
    GROUP BY DAY(updatedAt)) as Lookup ON Lookup.id = pl_scores.id 
WHERE pl_scores.pid = 977 ORDER BY pl_scores.updatedAt ASC LIMIT 7 

希望這有助於。