You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite查询最近7天每日交易总额 无数据时返回0/null的实现

核心问题在于你现有SQL是直接对交易表做分组聚合,没有交易记录的日期本身不存在于交易表中,自然会被过滤。要实现需求你需要先生成最近7个自然日的连续日期序列,再和交易表关联聚合即可,以下是适配你当前使用的SQLite语法的实现:

WITH RECURSIVE recent_days AS (
    -- 递归生成最近7天的连续日期序列,从当日开始往前推
    SELECT DATE('now') AS full_date
    UNION ALL
    SELECT DATE(full_date, '-1 day')
    FROM recent_days
    LIMIT 7
)
SELECT
    IFNULL(SUM(t.value), 0) AS total,
    STRFTIME('%d/%m', rd.full_date) AS date
FROM recent_days rd
LEFT JOIN transactions t
    ON DATE(t.date, 'unixepoch') = rd.full_date
GROUP BY rd.full_date
ORDER BY rd.full_date DESC;

关键说明

  • 递归CTE recent_days 会生成固定7条的连续日期记录,不受交易表数据影响
  • 用LEFT JOIN关联交易表,保证无交易的日期不会被过滤
  • IFNULL(SUM(t.value), 0) 会将无交易日期的总额默认置为0,如果你需要返回null直接去掉IFNULL包裹即可
  • 日期输出格式默认按你示例的日/月格式实现,如果你不需要前导零(比如22/9而非22/09),可以在SQLite 3.38.0及以上版本使用STRFTIME('%_d/%_m', rd.full_date)调整格式化参数
  • 输出默认按日期倒序排列,最新的日期在最上方,和你给出的示例排序一致

内容的提问来源于stack exchange,提问作者hesham shawky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:39:04