2012-03-24 178 views
0

我現在有一個查詢,顯示了這段時間之間的所有調用,有沒有一種方法來格式化它以在一個查詢中顯示「日(9-5)」和「夜(5-12)」 ?結合MySQL查詢

select dst, count(dst) as Day from cdr 
WHERE lastapp='Queue' 
AND Date(calldate) = '2012-03-23' 
AND TIME(calldate) BETWEEN '08:00' AND '17:00' 
GROUP BY dst; 

+------+-----+ 
| dst | Day | 
+------+-----+ 
| 1010 | 10 | 
| 1011 | 21 | 
| 1012 | 7 | 
+------+-----+ 

我想要的是這樣的,所以我可以在PHP中的數組中抓住它,而不必執行2個查詢。

+------+-----+-------+ 
| dst | Day | Night | 
+------+-----+-------+ 
| 1010 | 10 | 20 | 
| 1011 | 21 | 12 | 
| 1012 | 7 | 4 | 
+------+-----+-------+ 

回答

0

是;你可以寫這樣的事情:

SELECT dst, 
     COUNT(IF(TIME(calldate) BETWEEN '08:00' AND '17:00', 1, NULL)) AS Day, 
     COUNT(IF(TIME(calldate) > '17:00', 1, NULL)) AS Night 
    FROM cdr 
WHERE lastapp = 'Queue' 
    AND DATE(calldate) = '2012-03-23' 
GROUP 
    BY dst 
; 

COUNT(...)數行,從而...了非空的數量IF(boolean, value_if_true, value_if_false)做什麼,它聽起來就像—看到http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html#function_if —雖然我應該指出,這是一個MySQL特定功能。如果你沒有特別將你的問題標記爲MySQL,我會建議使用CASE WHEN boolean THEN value_if_true ELSE value_if_false END,因爲這是大多數或所有DMBS支持的標準語法。)

+0

完美的是,我在玩的是類似的子查詢,但你填補空白。 – Gnobiwan 2012-03-24 21:28:14