【问题标题】:SQLite group by all the days in selected date range even data not exsistSQLite 按选定日期范围内的所有日期分组,即使数据不存在
【发布时间】:2021-03-22 19:32:09
【问题描述】:

我有一个表 invoice 有两列,datetotal 我想得到过去 30 天的 total 组按一个月的所有天(或者最后 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 作为那几天的总和)

【问题讨论】:

    标签: sql sqlite datetime aggregate-functions recursive-query


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多