Непонятно, как «добавление строки» связано с диаграммой или вставками ... Однако, просто сосредоточившись на запросе, можно использовать либо таблицу календаря, либо CTE , чтобы сгенерировать все даты в пределах определенной датыспектр.(Для больших наборов данных таблица календаря обычно лучше)Когда у вас есть даты, outer join
верните их в таблицу приложений, чтобы получить счет за каждую дату.
Вы не упомянули, какую СУБД вы используете, но по синтаксису я угадываю Oracle.Предполагая, что столбец «applicationDate» ТОЛЬКО содержит дату (без времени), приведенный ниже запрос вернет счетчик для всех дат в данном диапазоне: #startDate#
и #endDate#
.При необходимости измените даты.
SQL: http://sqlfiddle.com/#!4/c09877/2
WITH CTE(TheDate) AS
(
SELECT FromDate+level-1
FROM (
SELECT <cfqueryparam value="#startDate#" cfsqltype="cf_sql_date"> AS FromDate
, <cfqueryparam value="#endDate#" cfsqltype="cf_sql_date"> AS ToDate
FROM dual
) d
CONNECT BY LEVEL <= ToDate - FromDate + 1
)
SELECT TheDate
, COUNT(b.applicationDate) AS count
FROM cte LEFT JOIN basketball b ON b.applicationDate = cte.TheDate
GROUP BY TheDate
ORDER BY TheDate
;
Примеры результатов:
| THEDATE | COUNT |
|----------------------|-------|
| 2019-05-21T00:00:00Z | 2 |
| 2019-05-22T00:00:00Z | 0 |
| 2019-05-23T00:00:00Z | 0 |
| 2019-05-24T00:00:00Z | 0 |
| 2019-05-25T00:00:00Z | 0 |
| 2019-05-26T00:00:00Z | 0 |
| 2019-05-27T00:00:00Z | 0 |
| 2019-05-28T00:00:00Z | 0 |
| 2019-05-29T00:00:00Z | 3 |
Обновление:
Я не очень хорош в PostgreSQL, но эта тема показывает, как генерировать диапазон дат.Просто замените жестко закодированные даты на cfqueryparam.
SQL: http://sqlfiddle.com/#!15/2a0a7/4
SELECT TheDate
, COUNT(b.applicationDate) AS count
FROM generate_series
( '2019-05-21'::date
, '2019-05-29'::date
, '1 day'::interval) TheDate
LEFT JOIN basketball b ON b.applicationDate = TheDate
GROUP BY TheDate
ORDER BY TheDate