2014-09-21 112 views
0

我在MySQL中有一個金融交易表,並且正試圖產生一個交易報告。考慮到企業的運營方式,財務日的上午4點 - 凌晨4點而不是午夜 - 午夜,所以我不必考慮Y-m-d對交易進行分組,而是必須考慮午夜之後發生的所有交易。MySQL日期分組

例如:

財務日是週一上午4點 - 週二上午4點。任何週二午夜後發生的交易都需要在週一的銷售中進行分類。

我的查詢,此刻的前提是:

select from_unixtime(date, '%Y-%m-%d') as t_date from transactions group by t_date 

我已經使用在查詢中的if語句,以確定當前行日期是午夜後凌晨4點,但嘗試過,但都無濟於事。希望我可以在MySQL中使用它,而不必循環遍歷PHP中的所有事務行。

任何幫助將不勝感激!

+0

查詢之間使用..從'2014-09-21 04:00:00'和'2014-09-22 04:00:00'之間的日期選擇列' – 2014-09-21 11:35:48

+0

'您必須按以下語句進行分組:'from_unixtime(date,'%Y- %m-%d')'不't_date'。如果查詢處於子查詢中,則可以訪問t_date,但由於您處於同一級別,因此必須使用該表達式。 – 2014-09-21 11:37:23

回答

0

從交易時間減去4小時。按該值分組。 MySQL有date and time functions可以幫助你減法。

+0

謝謝,剛剛看過date_sub,所以我只是減去一天,如果小時低於4 'if(from_unixtime(t.date,'%H')<4,date_sub(from_unixtime(t.date,'%Y- %m-%d'),INTERVAL 1 DAY),from_unixtime(t.date,'%Y-%m-%d'))as t_date' – ab92014 2014-09-21 11:37:24

+0

您可以在轉換爲其他格式之前從數據庫列中減去4小時:'from_unixtime(date_sub(t.date,INTERVAL 4 HOUR),'%Y-%m-%d')'。似乎更容易。 – Oswald 2014-09-21 11:57:50

+0

非常感謝,工作過。 – ab92014 2014-09-21 14:26:43

0

如果您的要求得到昨天記錄 以下是查詢來處理這個。

SELECT DATE_FORMAT(t.date, '%Y-%m-%d %k') as perDay 
FROM `table` t 
WHERE t.date BETWEEN DATE_ADD(CURDATE(), INTERVAL -1 day) AND CURDATE() 
GROUP BY perDay 
0

如果你想星期二凌晨3點週一凌晨4點之間的所有交易,那麼我認爲你需要檢查日期加時間也很喜歡「YMD H:I:S」

+0

這不是一個答案......它可以是一個評論。 – tod 2014-09-21 11:49:51