2011-12-23 83 views
4

我每隔一小时将一条记录插入到我的表中。现在我需要检索过去30天内每天的最近记录。SQL - 检索最近7天的最后一天记录

这里是我的表:

pl_scores: { 
    score_id: 'BIGINT(255) PRIMARY KEY AUTO_INCREMENT' 
, pid: 'INT(100)' 
, score: 'INT(255)' 
, rank: 'INT(50)' 
, city_cnt: 'INT(10)' 
, updatedAt: 'DATETIME' 
} 

既然有24条记录的每一天我在一个损失如何拉最近的只有这一天。任何帮助,将不胜感激。

回答

4

第1步 - 按天分组。
第2步 - 为每个组选择最后一个条目的时间戳。
第3步 - 返回并获取与这些时间戳相匹配的记录。


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 

注:这是假定每个记录在updatedAt不同的值。如果它们不是唯一的,并且多个记录在任何给定日期都是最新的,则返回所有绑定记录。

+0

对不起,在我完成之前保存。糟糕!现在完成:) – MatBailie 2011-12-23 03:10:35

+0

因此,我可以添加一个订单,并限制选择最近30天或7天,是否正确? – 2011-12-23 03:32:37

+0

@PastorBones - 是的。尽管使用'WHERE updatedAt> ='from date here''可以看到更好的性能。这也将保证天数而不是记录数。 (例如,圣诞节当天没有插入任何记录。) – MatBailie 2011-12-23 03:35:12