2012-03-24 2 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

Смежные вопросы