MySQL COUNT, SUM с GROUP BY с выводом несуществующих значений?

Существует таблица `table` звонков c полями user, datetime, duration, call_id
В полях user, datetime данные дублируются.
Общее кол-во звонков и их длительность за период получаю так:

SELECT `user`, DATE(`datetime`) as `date`, count(`duration`) as `count` 
FROM `table`
WHERE
	`datetime` >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
GROUP BY `date` DESC, `user` ASC


Каким образом в выводимой таблице получить
пропущенные уникальные значение поля `user` (SELECT DISTINCT `user` FROM `table`)
для дней, где не было звонков для этих "user"?
  • Вопрос задан
  • 687 просмотров
Решения вопроса 1
xnscripter
@xnscripter Автор вопроса
Заполняем переменные пользователя мин. и макс. значением поля datetime:
SELECT MIN(`datetime`), MAX(`datetime`) 
FROM `table`
WHERE TIMESTAMP BETWEEN "2014-10-01" AND "2017-10-31"
INTO @min_d, @max_d;
SET @n:=date(@max_d + INTERVAL 1 DAY);


Все даты запрошенных дней:
SELECT * FROM

	/* Все пользователи */
	(SELECT DISTINCT `user`
	FROM `table` 
	WHERE 
	NOT ISNULL(`user`)
	) AS `users`

	RIGHT OUTER JOIN

	/* Все даты запрошенных дней */
	(SELECT (SELECT @n:= @n - INTERVAL 1 DAY) AS `date`
	FROM `table`
	WHERE @n >= DATE_SUB(@max_d, INTERVAL DATEDIFF(@max_d,@min_d) DAY) AND 
	NOT ISNULL(`user`)
	) AS `datetime`

ON TRUE
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы