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

SQL中计算启动日与截止日间隔天数及平均值的实现方法

计算日期间隔天数并求平均值的SQL实现方案

刚接触SQL不用慌,我来一步步帮你实现这个需求——先给每条记录算出Launched和Deadline的间隔天数(新增Duration列),再算出这些天数的平均值,还能把明细和平均值放在同一个结果里展示。

第一步:计算每条记录的间隔天数

不同数据库计算日期差的函数略有不同,我给你列出几种常用数据库的写法,你根据自己用的数据库选就行:

  • MySQL/MariaDB:用DATEDIFF函数,参数是「结束日期,开始日期」
    SELECT
        Launched,
        Deadline,
        DATEDIFF(Deadline, Launched) AS Duration
    FROM 你的表名; -- 记得把这里换成你实际的数据表名称
    
  • PostgreSQL:可以用DATE_PART提取日期差的天数
    SELECT
        Launched,
        Deadline,
        DATE_PART('day', Deadline - Launched) AS Duration
    FROM 你的表名;
    
  • SQL Server:用DATEDIFF函数指定单位为day
    SELECT
        Launched,
        Deadline,
        DATEDIFF(day, Launched, Deadline) AS Duration
    FROM 你的表名;
    
  • Oracle:直接用截止日期减启动日期,再用TRUNC去掉小数部分
    SELECT
        Launched,
        Deadline,
        TRUNC(Deadline - Launched) AS Duration
    FROM 你的表名;
    

第二步:同时展示明细和平均值

如果你想把每条记录的Duration和所有天数的平均值放在同一个结果表里(就像你期望的那样,最后一行显示Avg),可以用UNION ALL把两个查询结果合并。以MySQL为例,写法是这样的:

-- 先查询所有记录的明细数据
SELECT
    CONVERT(Launched, CHAR) AS Launched, -- 把日期转成字符串,避免和后面的'Avg'类型冲突
    CONVERT(Deadline, CHAR) AS Deadline,
    DATEDIFF(Deadline, Launched) AS Duration
FROM 你的表名
UNION ALL
-- 再查询平均值,用'Avg'标记列名
SELECT
    'Avg' AS Launched,
    'Avg' AS Deadline,
    AVG(DATEDIFF(Deadline, Launched)) AS Duration
FROM 你的表名;

执行这个语句后,结果就会是你想要的格式:

LaunchedDeadlineDuration
2023-01-012023-01-109
2023-02-052023-02-1510
AvgAvg9.5

小提示

  • 记得把语句里的「你的表名」替换成你实际使用的数据表名称;
  • 如果你的日期列可能存在NULL值,建议加上WHERE Launched IS NOT NULL AND Deadline IS NOT NULL,避免计算出无效结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:06:02