2009-09-02 50 views
2

我有一个表中的SQLite:选择每天最新的条目,相应的数据

CREATE TABLE test_results(timestamp TEXT, npass INTEGER, nfails INTEGER) 

我想回到过去的合格/不合格的每一天的信息。例如,如果表中包含...

 
2009-08-31 23:30:19|0|24 
2009-08-31 23:37:18|0|24 
2009-08-31 23:40:00|0|24 
2009-09-01 19:02:13|0|2 
2009-09-01 19:08:24|2|0 
2009-09-01 19:20:29|2|0 

我想一个select语句返回...提前

 
2009-08-31 23:40:00|0|24 
2009-09-01 19:20:29|2|0 

谢谢!

回答

6

尝试:

SELECT t.timestamp, 
     t.npass, 
     t.nfails 
    FROM TEST_RESULTS t 
    JOIN (SELECT MAX(tt.timestamp) 'maxtimestamp' 
     FROM TEST_RESULTS tt 
    GROUP BY date(tt.timestamp)) m ON m.maxtimestamp = t.timestamp 
1

你可以试试这个查询:

SELECT * FROM (select * from test_results ORDER BY timestamp) 
GROUP BY date(timestamp) 

如果你也想获得第一失败的每一天:

SELECT * FROM (select * from test_results ORDER BY timestamp DESC) 
GROUP BY date(timestamp) 
+1

两者都不会工作,因为TEST_RESULTS有三列,其中两列未包含在您的GROUP BY中。我也看不到SELECT * ORDER BY时间戳将如何检索每天的最后一个条目。 – 2009-09-02 01:49:46

+0

@rexem,我在发布之前用实际数据尝试过。 – 2009-09-02 04:52:35

+0

刚刚尝试过它,它的工作原理,很好,很简单 – sham 2016-08-17 22:15:10

0

这是怎么了我解决这类问题:

SELECT t1.* 
FROM test_results t1 
LEFT OUTER JOIN test_results t2 
    ON (DATE(t1.timestamp) = DATE(t2.timestamp) AND t1.timestamp < t2.timestamp) 
WHERE t2.timestamp IS NULL; 

这假设timestamp列对其有唯一或主键约束。否则,你可能会有一个(小)的机会,你可能每天都会得到不止一行。