Вам нужна таблица календаря, чтобы выбрать даты.В качестве альтернативы, если у вас есть таблица чисел, вы можете эффективно превратить ее в таблицу календаря.По сути, это просто таблица с каждой датой.Создать и сгенерировать для него данные достаточно просто, и в таких ситуациях это очень удобно.Тогда вы просто используете:
SELECT
C.calendar_date,
SUM(T.amount)
FROM
Calendar C
LEFT OUTER JOIN Transactions T ON
T.transaction_date = C.calendar_date
GROUP BY
C.calendar_date
ORDER BY
C.calendar_date
Несколько вещей, которые нужно иметь в виду:
Если вы отправляете это во внешний интерфейс или механизм отчетов, то вам просто нужно отправить датычто у вас есть (ваш исходный запрос), и внешний интерфейс, если это возможно, сам заполняет 0,00 долларов.
Кроме того, я предположил, что дата является точным значением даты без компонента времени (следовательно,"=" в соединении).Ваша календарная таблица может содержать «start_time» и «end_time», чтобы вы могли использовать BETWEEN для работы с датами, включающими часть времени.Это избавит вас от необходимости отбирать порции времени и потенциально разрушать использование индекса.Вы также можете просто рассчитать начальную и конечную точки дня, когда вы его используете, но, поскольку это предварительно заполненная рабочая таблица, в IMO проще включить start_time и end_time.