2012-02-14 146 views
1

我试图想出一个MySQL查询来选择最近7天的最后一条记录。如果前7天中有1天缺少数据,我只会收回6条记录。下面是我有:MySQL Query为过去7天的每一天选择最后一条记录

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 

基本上这是什么应该做的是选择属性ID = 1的跟踪表中的每个的过去7天的最后记录的条目(今天开始)。然而,这个查询返回这样对我(不是在过去的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 

任何有助于解决这个问题了,将不胜感激!

+0

确认......是“ID”列自动增量的主键,2。 ..是最后检查总是对应于它被添加的时间,并且不可以由ID 83和更早的时间比ID 84或类似的人修改?另外,你有最后检查列的索引? – DRapp 2012-02-14 16:33:14

回答

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 
0

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

DATE_SUB(lastChecked, INTERVAL 7 DAY) 

应该是:

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

代码的这种情况将是因为lastChecked总是大于lastChecked -7,所以对于每条记录都是如此。 所以,如果你需要的最后7天的数据与

WHERE lastChecked >= DATE_SUB(SYSDATE(), INTERVAL 7 DAY) 
相关问题