2009-09-02 89 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列對其有唯一或主鍵約束。否則,你可能會有一個(小)的機會,你可能每天都會得到不止一行。