2013-07-04 5 views
1

У меня есть запрос MySQL, который я запускаю, чтобы определить, сколько звонков было зарезервировано для пользователя в любой час (в любой день и т. Д.) В течение 15 минут временные интервалы. До сих пор у меня есть:Количество записей в каждом временном интервале с MySQL

SELECT 
date_action, 
DATE_FORMAT(date_action, "%i") AS minute, 
CASE 
    WHEN minute(date_action) BETWEEN 0 and 14 THEN '00' 
    WHEN minute(date_action) BETWEEN 15 and 29 THEN '15' 
    WHEN minute(date_action) BETWEEN 30 and 44 THEN '30' 
    WHEN minute(date_action) BETWEEN 45 and 59 THEN '45' 
END AS intervals 
FROM 
clients 
WHERE 
HOUR(date_action) = 09 
AND DAY(date_action) = 15 
AND MONTH(date_action) = 07 
AND YEAR(date_action) = 2013 

Это работает хорошо, как это, но волшебный компонент я пропускаю это «подсчет» число вызовов, назначенных каждый интервал, так, например, приведенный выше код производит:

Date_time - Minute - Interval 
2013-07-15 09:54:24 - 54 - 45 
2013-07-15 09:29:32 - 29 - 15 
2013-07-15 09:13:33 - 13 - 00 
2013-07-15 09:53:53 - 53 - 45 
2013-07-15 09:00:49 - 00 - 00 

Итак, у меня есть мои минуты превращается в промежутки времени, я только хочу, чтобы вернуть 1 строку для каждого интервала, а затем приложили к нему столбец с подсчета количества вызовов в этом интервале, т.е.

Interval - Count 
45 - 2 
15 - 1 
00 - 2 

Мне кажется, что я слишком долго стучал головой о кирпичную стену на этом, поэтому любая помощь будет очень признательна. Несмотря на то, что после запроса есть некоторая пост-обработка, я бы скорее сделал это все в SQL, если это возможно. :)

ответ

2

Вы можете группировать интервалы и выбирать подсчеты.

SELECT 
    count(date_action) as count, 
    CASE 
     WHEN minute(date_action) BETWEEN 0 and 14 THEN '00' 
     WHEN minute(date_action) BETWEEN 15 and 29 THEN '15' 
     WHEN minute(date_action) BETWEEN 30 and 44 THEN '30' 
     WHEN minute(date_action) BETWEEN 45 and 59 THEN '45' 
    END AS intervals 
FROM 
    clients 
WHERE 
    HOUR(date_action) = 09 
    AND DAY(date_action) = 15 
    AND MONTH(date_action) = 07 
    AND YEAR(date_action) = 2013 
    AND rep_id = 28 
GROUP BY intervals 
+0

OMG, как я не видел. Думаю, снова сидеть слишком близко к моему экрану! Большое спасибо. :) –

0
select period, Sum(NumberOfTimes) as NumberOfTimes 
From 
(Select minute(date_action) % 15 as period, 1 as NumberOfTimes 
From Clients 
WHERE 
    HOUR(date_action) = 09 
    AND DAY(date_action) = 15 
    AND MONTH(date_action) = 07 
    AND YEAR(date_action) = 2013 
    AND rep_id = 28 
) dummyName 
Group By period 

будет еще один способ

% является оператор модуля

+0

спасибо - отлично, чтобы иметь разные варианты. :) –