检索过去7天当天的最后一条记录

时间:2011-12-28 09:53:12

标签: mysql greatest-n-per-group

我正在尝试检索过去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

3 个答案:

答案 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