MySQL Query为过去7天中的每一天选择最后一条记录

时间:2012-02-14 13:30:06

标签: mysql sql datetime select

我正在尝试使用MySQL查询来选择前7天中的每一条记录。如果前7天中有1天缺少数据,我只会找回6条记录。这就是我所拥有的:

SELECT tracking.* FROM tracking
INNER JOIN 
    (SELECT MAX(lastChecked) AS maxLastChecked, id FROM tracking 
    WHERE lastChecked >= DATE_SUB(lastChecked, INTERVAL 7 DAY ) 
        GROUP BY DAY(lastChecked)) as Lookup ON Lookup.id = tracking.id
            WHERE tracking.propertyID = 1 ORDER BY tracking.lastChecked ASC LIMIT 7

基本上,应该做的是在过去7天(从今天开始)的每个跟踪表中为propertyID = 1选择最终记录的条目。但是,此查询将此返回给我(超过过去7天内的唯一记录):

ID    propertyID  lastChecked              value
2     1           2012-01-25 05:30:00      280
1     1           2012-01-26 12:34:02      268
5     1           2012-01-27 09:51:31      268
83    1           2012-02-13 00:01:07      276

任何帮助解决这个问题都将非常感谢!

3 个答案:

答案 0 :(得分:0)

我相信你应该在这一部分有一个系统日期而不是“lastChecked”:

DATE_SUB(lastChecked, INTERVAL 7 DAY )

应该是:

DATE_SUB(SYSDATE(), INTERVAL 7 DAY )

答案 1 :(得分:0)

WHERE lastChecked >= DATE_SUB(lastChecked, INTERVAL 7 DAY )

您的代码的这种情况对于每条记录都是正确的,因为lastChecked总是大于lastChecked -7。 因此,如果您需要过去7天的数据,请将其替换为

WHERE lastChecked >= DATE_SUB(SYSDATE(), INTERVAL 7 DAY )

答案 2 :(得分:0)

尝试此查询:

SELECT tracking.* FROM tracking
INNER JOIN 
    (SELECT MAX(lastChecked) AS maxLastChecked, id FROM tracking 
    WHERE DATEDIFF(lastChecked,NOW())<=7
        GROUP BY DAY(lastChecked)) as Lookup ON Lookup.id = tracking.id
            WHERE tracking.propertyID = 1 ORDER BY tracking.lastChecked ASC