Группа SQLite по всем дням в выбранном диапазоне дат, даже данные не существуют

У меня есть таблица invoice с двумя столбцами, date и total Я хочу получить общую группу за последние 30 дней по всем дням месяца (или группы за последние 7 дней по всем дням недели)

date     total
11/16    500
11/23    200
12/2     400
12/4     600

Я пробовал что-то вроде этого,

SELECT strftime('%m/%d', Date) as valDay, SUM(Total) 
FROM invoice  
GROUP BY valDay 
Order By Date DESC LIMIT 30 ;

Он дает последние 30 записей. но мне нужны записи за все последние 30 дней, даже если в таблице нет данных за некоторые дни (она должна возвращать 0 как общее количество за эти дни)

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
231
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать рекурсивный запрос для генерации дат, затем принести таблицу с левым соединением и агрегировать:

with recursive cte as (
    select date('now') as dt,  date('now', '-30 day') last_dt
    union all select date(dt, '-1 day'), last_dt from cte where dt > last_dt
)
select c.dt, coalesce(sum(i.total), 0) as total
from cte c
left join invoice i on i.date >= c.dt and i.date < date(c.dt, '+1 day')
group by c.dt
order by c.dt desc

Другие вопросы по теме