2017-04-21 45 views
0

與開始時間和結束時間的任意時間間隔數據我有這個表:如何使用GROUPBY得到SQLite中

CREATE TABLE "DataPoint" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
"startTime" INTEGER, 
"endTime" INTEGER, 
"value" INTEGER 
); 

有了這些數據:

INSERT INTO DataPoint (startTime,endTime,value) VALUES 
(1490976000000,1490997600000,1), --2017/04/01 00:00:00 ,2017/04/01 06:00:00 
(1491008400000,1491030000000,2), --2017/04/01 09:00:00 ,2017/04/01 15:00:00 
(1491044400000,1491051600000,3), --2017/04/01 19:00:00 ,2017/04/01 21:00:00 
(1491058800000,1491069600000,4), --2017/04/01 23:00:00 ,2017/04/02 02:00:00 
(1491102000000,1491120000000,5), --2017/04/02 11:00:00 ,2017/04/02 16:00:00 
(1491220800000,1491222600000,6), --2017/04/03 20:00:00 ,2017/04/03 20:30:00 
(1491309000000,1491316200000,7); --2017/04/04 20:30:00 ,2017/04/04 22:30:00 

現在我想查詢和值每天,所以我試過這個:

SELECT SUM(value) 
FROM DataPoint 
GROUP BY (endTime-startTime)/(24*60*60*1000) 

但它是錯誤的。我不知道如何編寫正確的SQL查詢語句。

預期的結果是這樣的:

date  |sumValueInDay 
-----------|------ 
2017/04/01 |6 
2017/04/02 |11 
2017/04/03 |6 
2017/04/04 |7 

另外,時間間隔可以是任意的,例如,也許我想查詢每40分鐘的總和值。

+0

爲什麼'(endTime-startTime)/(24 * 60 * 60 * 1000)'?爲什麼不''(endTime)/(24 * 60 * 60 * 1000)'? – cha

回答

0

我建議你convert你的UNIX時間到SQLite的日期時間變量,然後按它分組。要轉換爲datetime可以使用:

select datetime(startTime/1000, 'unixepoch', 'localtime') as startDatetime 
    , datetime(endTime/1000, 'unixepoch', 'localtime') as endDatetime 
    , value 
FROM DataPoint; 

你的錯誤是,在使用區間(endTime-startTime)進行分組。您應該決定使用哪個日期(endTime或startTime)進行分組。

E.g.按天使用組:

select date(startTime/1000, 'unixepoch', 'localtime') as startDatetime 
    , Sum(value) 
FROM DataPoint 
GROUP BY date(startTime/1000, 'unixepoch', 'localtime');