SQLite按选定日期范围内的所有日期分组,即使数据不存在

SQLite按选定日期范围内的所有日期分组,即使数据不存在,sql,sqlite,datetime,aggregate-functions,recursive-query,Sql,Sqlite,Datetime,Aggregate Functions,Recursive Query,我有一个表格发票,有两列,日期和总数。我想按月份的所有天数计算最后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天的总数,或者按一周的所有天数计算最后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作为该天的总计

您可以使用递归查询生成日期,然后将表格与左联接,并聚合:

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