2017-10-18 42 views
1

通過UNIX_TIMESTAMP組的日期我有一個GROUP BY子句中我的查詢:的MySQL - 1970年以前

SELECT * FROM currency_data 
WHERE currency = 'GBP' 
GROUP BY UNIX_TIMESTAMP(date) DIV (1440 * 60) 
ORDER BY date ASC 

這工作對大多數的記錄,但我有一些記錄帶有日期1970年<因此,通過組忽略這些記錄。有什麼辦法讓這些小組爲這些記錄工作?

我的'日期'列的類型爲DATETIME

回答

3

有1970年以前沒有UNIX TIMESTAMP - 這是時間戳0 您可以通過真正的約會組

在MySQL中,你可以用它來得到一個負數:DATEDIFF(STR_TO_DATE('04-07-1968','%d-%m-%Y'),FROM_UNIXTIME(0))*24*36‌​00

+0

這可能是在MySQL中,但它不是一個真正的Unix時間戳。 Unix系統允許使用負值(https://en.wikipedia.org/wiki/Unix_time)。 –

+0

在MySQL中,你可以用它來得到一個負數:DATEDIFF(STR_TO_DATE('04 -07-1968','%d-%m-%Y'),FROM_UNIXTIME(0))* 24 * 3600 – DreamWave

3

首先,select *group by幾乎總是做錯事。你應該使用聚合函數。

沒有理由使用UNIX_TIMESTAMP()。只是做

SELECT date(date), currency, min/max/avg/sum . . . 
FROM currency_data 
WHERE currency = 'GBP' 
GROUP BY date(date), currency 
ORDER BY date ASC 
+0

這會返回一個每個日期最多一個記錄。我使用'DIV'函數間隔返回數據,所以在某些情況下,它需要以15分鐘的時間間隔以及24小時的時間間隔,就像我原來的文章一樣。 – GSTAR

相關問題