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

如何在Firebird SQL中统计两个日期间的每周订单总数

Firebird SQL 每周订单统计及DATEDIFF报错解决

一、DATEDIFF周数计算错误修复

Firebird的DATEDIFF函数不支持ww作为周单位,正确的周单位是week(或缩写w),同时Firebird查询必须包含FROM子句(可使用系统表RDB$DATABASE)。修正后的语句:

SELECT DATEDIFF(week, DATE '2019-09-18', DATE '2019-12-01') AS 周数差
FROM RDB$DATABASE;

二、统计两个日期间每周订单总数

你原语句的问题在于GROUP BY使用了固定日期偏移,未关联每个订单的实际日期,且不能直接用SELECT中的别名分组。正确做法是将每个订单日期映射到其所在周的第一天,再按该日期分组统计。

以周一作为每周第一天(Firebird默认周日为一周起始,需调整偏移)

SELECT 
    COUNT(*) AS 每周订单总数,
    DATEADD(DAY, -EXTRACT(WEEKDAY FROM r.TARIH) + 1, r.TARIH) AS 每周第一天
FROM RB r
WHERE r.TARIH BETWEEN DATE '2019-09-18' AND DATE '2019-12-01'
GROUP BY DATEADD(DAY, -EXTRACT(WEEKDAY FROM r.TARIH) + 1, r.TARIH)
ORDER BY 每周第一天;

以周日作为每周第一天

SELECT 
    COUNT(*) AS 每周订单总数,
    DATEADD(DAY, -EXTRACT(WEEKDAY FROM r.TARIH), r.TARIH) AS 每周第一天
FROM RB r
WHERE r.TARIH BETWEEN DATE '2019-09-18' AND DATE '2019-12-01'
GROUP BY DATEADD(DAY, -EXTRACT(WEEKDAY FROM r.TARIH), r.TARIH)
ORDER BY 每周第一天;

关键说明

  • EXTRACT(WEEKDAY FROM 日期)返回值:周日=0,周一=1,周六=6,以此为基础通过DATEADD偏移得到周第一天
  • Firebird不支持在GROUP BY中直接引用SELECT的别名,需重复写入日期计算表达式(或用子查询封装)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:31:14