В настоящее время я получаю счет, сгруппированный по часам и неделям:
SELECT HOUR(creationtimestamp), dayname(creationtimestamp), count(*)
FROM cdrdb.session
WHERE DATE_SUB(creationtimestamp,INTERVAL 1 HOUR) And
creationtimestamp > DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY HOUR(creationtimestamp);
Что возвращает:
0 Monday 23
0 Tuesday 96
0 Wednesday 85
0 Thursday 76
0 Friday 114
0 Saturday 47
0 Sunday 32
1 Monday 2
1 Tuesday 20
1 Wednesday 19
1 Thursday 16
1 Friday 31
1 Saturday 9
1 Sunday 6
2 Monday 13
2 Tuesday 18
2 Wednesday 5
2 Thursday 5
2 Friday 8
И это продолжается до часа 23 Но это не совсем то, что я собираюсь получить.
Я бы хотел иметь около 60 результатов после того, как все сказано и сделано, в среднем по записям в течение часов с 7 до 18 часов, поэтому у меня будет строка для каждого часа понедельника через пятницу со средним количеством записей за это время Рамка.
Может быть, это будет больше похоже на
Monday | 7:00 | 89
Monday | 8:00 | 53
Monday | 9:00 | 53
...
Tuesday | 8:00 | 53
Как я могу изменить свою группу для этого
ОБНОВЛЕНИЕ ЗАПРОСА:
Правильное количество часов и дней, но средние значения могут быть неправильными. Попытка получить средний призыв на каждый понедельник с 8 до 859 утра и т.д.
SELECT
dayname(creationtimestamp) as day,
HOUR(creationtimestamp) as Hour,
(sum(callsIN/ 60) * 100 as averageCalls,
(sum(callsMissed)/sum(callsIN) * 100 as averageMissedCalls
FROM session s
WHERE (creationtimestamp >= '2018-01-01' AND creationtimestamp < now())
and WEEKDAY(creationtimestamp) BETWEEN 0 AND 4
AND HOUR(creationtimestamp) between 7 and 18
AND finallycalledpartyno IN ( 7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312)
GROUP BY dayname(creationtimestamp), HOUR(creationtimestamp)
order by dayofweek(creationtimestamp), hour asc;
вы можете использовать для group by dayname (creationtimestamp), HOUR (creationtimestamp) и предел до 60 результата
SELECT HOUR(creationtimestamp), dayname(creationtimestamp), count(*)
FROM cdrdb.session
WHERE DATE_SUB(creationtimestamp,INTERVAL 1 HOUR) And
creationtimestamp > DATE_SUB(NOW(), INTERVAL 1 DAY)
AND HOUR(creationtimestamp) between 7 and 18
GROUP BY dayname(creationtimestamp), HOUR(creationtimestamp)
ORDER BY dayname(creationtimestamp), HOUR(creationtimestamp) limit 60;