Мне кажется, что я уже видел этот вопрос, но ни SO, ни Google не помогают мне ... может быть, я просто не знаю, как сформулировать вопрос. Мне нужно посчитать количество событий (в данном случае, логинов) в день за определенный промежуток времени, чтобы я мог составить график использования сайта. На данный момент у меня есть следующий запрос:
select
count(userid) as numlogins,
count(distinct userid) as numusers,
convert(varchar, entryts, 101) as date
from
usagelog
group by
convert(varchar, entryts, 101)
Это делает большую часть того, что мне нужно (я получаю строку за дату как вывод, содержащий общее количество входов в систему и количество уникальных пользователей на эту дату). Проблема в том, что если никто не входит в систему в определенную дату, в наборе данных не будет строки для этой даты. Я хочу, чтобы он добавил в строках, указывающих ноль логинов для этих дат. Есть два подхода к решению этой проблемы, и ни один из них не кажется мне очень элегантным.
- Добавить в результирующий набор столбец, в котором указано количество дней между началом периода и датой текущей строки. Когда я строю вывод своей диаграммы, я буду отслеживать это значение и, если следующая строка не равна текущей строке плюс один, вставлять в диаграмму нули для каждого из пропущенных дней.
- Создайте таблицу «date», в которой есть все даты в интересующем периоде и внешнее объединение против него. К сожалению, в системе, над которой я работаю, уже есть таблица для этой цели, которая содержит строку для каждой даты в далеком будущем ... Мне это не нравится, и я предпочел бы избегать ее использования, тем более что Таблица предназначена для другого модуля системы и, таким образом, вводит зависимость от того, что я сейчас разрабатываю.
Какие-нибудь лучшие решения или советы по улучшению условий поиска для Google? Спасибо.