2012-08-07 119 views
0

是否可以在特定時間段內計算特定時間內的數據?mysql在特定日期之間的特定時間段內計算數據

我有一個大的數據集,並要計算的「量」在一天的某些時間之間收集的特定時期。

例如:下面,我要總結00:00之間收集的量 - 14時59爲「數量1」和量15:00之間收集 - 從7月1日20時59分爲「金額2」到7月31日。 '合計金額'= '數量1' + '金額2'

總和(如果( '2012-07-01 00:00:00' 和 '2012-07-31 14點59分00秒' 之間的日期, (金額),0))作爲'金額1', 金額(if('2012-07-01 15:00:00'和'2012-07-31 20:59:00'之間的日期,(金額), 0))作爲'金額2', 總額(金額)爲'總金額'

但是,'總金額'的結果與'金額1'+'金額2'不匹配。

+0

的。 「Amount1 + Amount2」和「TotalAmount」之間的差異是由第一次*和第二次日期*之間既不* GE。你知道這兩個範圍重疊很明顯,對嗎?你可能應該在'IF()'結構中用'WHERE'子句和* times *來限制*日期*。 – jensgram 2012-08-07 16:07:33

+0

謝謝Jensgram! 由於日期列包含日期和時間,因此必須使用TIME()函數並在「Where」子句中指定日期。仍然有一些差異,但會試圖弄清楚。 sum(if('(15:00:00'和'20:59:00',(Amount),0))之間的時間(DATE))作爲'金額1' – Justus 2012-08-07 16:38:50

+0

然而,面臨另一個問題!在'00:00:00' - '14:59:59'和'15:00:00'和'20:59:59'之間運行,但是如果我改變時間以顯示'21:00 :00' - '14:59:59'(next day)and '15:00:00'-'20:59:59','Amount 1'不返回任何值。查詢:SELECT CUSTOMER ID, NAME, SUM(IF(時間(日期)'21之間:00' :00和'14:59:59' ,(金額),0))爲 '數量1', SUM(IF(時間(日期)在'15:00:00'和'20:59:59'之間,(金額),0))爲'金額2', 總金額爲'總金額' FROM CUSTOMER_DATABASE WHERE DATE between' 2012-07-01'和'2012-07-31' group by 1 order by 5 – Justus 2012-08-07 17:10:25

回答

1

你是不是把你的總量方面的任何限制(即沒有日期或時間限制,因此範圍被納入您的日期/時間之外的數據,你既可以有條件的邏輯添加到您的總和(金額)像你這樣對其他字段或添加一個WHERE子句這樣的:

WHERE DATE(Amount) BETWEEN '2012-07-01' and '2012-07-31' 
AND TIME(Amount) BETWEEN '00:00:00' and '20:59:00' 

這將允許正確計算的總金額,也讓你消除疼痛的時間幅度總和邏輯日期範圍條件

+0

對不起,應該包含完整的查詢。我已經指定了開始日期和結束日期。 SELECT CUSTOMER ID, NAME, sum(if('2012-07-27 00:00:00'和'2012-07-31 14:59:00'之間的日期,(金額),0))作爲'金額1', 金額(如果(('2012-07-27 15:00:00'和'2012-07-31 20:59:00'之間的金額,(金額),0))爲'金額2', 總計(金額)爲'總金額' FROM CUSTOMER_DATABASE '2012-07-27 00:00:00'和'2012-07-31 20:59:00'之間的日期' 組合1 order by 5 – Justus 2012-08-07 16:24:28

+0

感謝您的幫助Mike!想通了:) – Justus 2012-08-07 16:45:38

+0

但是,面臨另一個問題!當我使用'00:00:00' - '14:59:59'和'15:00:00'和'20:59:59'之間的時間時,它可以工作。但如果我改變顯示'21:00:00' - '14:59:59'(次日)和'15:00:00'之間的時間 - '20:59:59','金額1'不會返回任何值。這裏是查詢:SELECT(CUSTOMER ID),NAME,sum(如果(時間(日期)在'21:00:00'和'14:59:59'之間,(金額),0))爲'金額1'如果(時間(日期)在'15:00:00'和'20:59:59'之間,(金額),0))爲'金額2',總金額爲'總金額'FROM CUSTOMER_DATABASE WHERE DATE '2012-07-01'和'2012-07-31'組by 1 order by 5 – Justus 2012-08-07 17:28:34

相關問題