2013-01-23 62 views
1

我一直在閱讀其他問題,並沒有運氣。我有一張表格(郵票,價值)。 '郵票'欄存儲每小時的時間戳。我正在試圖做的是檢索SUM(值)取決於範圍在查詢中指定的時間戳的24小時間隔:GROUP BY間隔重疊時間戳MySQL查詢

SELECT stamp, 
     Sum(value) 
FROM table 
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
     AND stamp < '2013-01-01 05:00:00' 
GROUP BY Date(stamp) 

我要找的是這樣的結果:

stamp      value 
2012-12-02 05:00:00  12024 
2012-12-03 05:00:00  11211 
2012-12-04 05:00:00  19834 
... 
2013-01-01 05:00:00  10232 

實際的表是這樣的:

stamp      value 
2012-12-01 01:00:00  345 
2012-12-01 02:00:00  100 
2012-12-01 03:00:00  104 
2012-12-01 04:00:00  103 
2012-12-01 05:00:00  101 
2012-12-01 06:00:00  102 
... 
2013-01-01 05:00:00  207 
2013-01-01 06:00:00  307 
2013-01-01 07:00:00  223 
... 

* 注意,郵票列的數據類型是時間戳

+0

那麼'郵票'返回每個日期組最早的時間戳之上? –

+0

請不要選擇不在您的「GROUP BY」中的列。 MySQL擴展了這個功能,但它的行爲並不準確,應該避免。 – Kermit

+0

儘可能使用'x BETWEEN y AND z'來代替'x> = y AND x <= z'。 – tadman

回答

2

我想你只是想將小時數設置爲5,以符合你的範圍。如果是這樣,你可以這樣做:

SELECT cast(date(stamp) as datetime) + interval 5 hour 
     Sum(value) 
FROM table 
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
     AND stamp < '2013-01-01 05:00:00' 
GROUP BY Date(stamp) 

不過,我想你可能真的想這句話有點不同:

SELECT cast(date(stamp - interval 5 hour) as datetime) + interval 5 hour 
     Sum(value) 
FROM table 
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
     AND stamp < '2013-01-01 05:00:00' 
GROUP BY Date(stamp - interval 5 hour) 

這實際上重新調整了5小時的邊界上的日期。

注意:這些查詢未經測試,因此可能包含語法錯誤。

這是假定時間戳實際上是一個日期時間。如果它是UNIX時間戳,則需要先將其轉換。

+0

感謝您的回覆。我確實得到了預期的郵票,但總額(價值)似乎沒有了。我檢查並意識到郵票列是UNIX時間戳而不是日期時間。 –

+0

謝謝!我結束了使用你的第一種方法,它的工作! –