我正在尝试检索过去7天内每天的最新记录。但是,返回的每条记录与updatedAt(最近一天)的日期相同,但其他数据确实正确返回。如何更改我的SQL查询以为每条记录提供正确的日期?
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 :(得分:2)
您必须GROUP BY
DAY(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
希望这有帮助。
答案 1 :(得分:0)
这取决于您的数据库如何存储时间/日期以及更改的原因/时间/方式。你有多少时间/日期字段以及如何存储?
答案 2 :(得分: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