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

如何使用SQL计算相同键/ID下同一列多行数值的差值?

SQL实现相同ID下日期差值计算

问题

  1. 如何基于相同键对同一列的两行数值进行相减?
  2. 如何提取相同ID下多行指定列的差值?

示例表结构及数据

idprev_valnew_valdate
1012020-01-01 10:00:00
1122020-01-01 11:00:00
2012020-01-01 10:00:00
2122020-01-02 10:00:00

预期结果

idduration_in_hours
11
224

说明:ID为1时,两个date值的差值为1小时;ID为2时,差值为24小时。

解决方案

完全可以用SQL实现,以下提供两种常用方案:

方案1:分组聚合计算首尾日期差(适合每个ID仅需最早/最晚差值)

如果每个ID的目标是计算最早和最晚日期的间隔,直接通过分组聚合即可:

SELECT 
    id,
    TIMESTAMPDIFF(HOUR, MIN(date), MAX(date)) AS duration_in_hours
FROM your_table
GROUP BY id;

方案2:窗口函数计算相邻行差值(适合多行间逐行计算)

如果ID下有多行数据,需要计算相邻行的日期差,用LAG()窗口函数获取上一行的日期值:

WITH ranked_dates AS (
    SELECT 
        id,
        date,
        LAG(date) OVER (PARTITION BY id ORDER BY date) AS prev_date
    FROM your_table
)
SELECT 
    id,
    TIMESTAMPDIFF(HOUR, prev_date, date) AS duration_in_hours
FROM ranked_dates
WHERE prev_date IS NOT NULL;

不同SQL方言适配

  • MySQL/MariaDB:使用TIMESTAMPDIFF(HOUR, start_date, end_date)
  • PostgreSQL:用EXTRACT(EPOCH FROM (end_date - start_date)) / 3600计算小时差
  • SQL Server:使用DATEDIFF(HOUR, start_date, end_date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:50:17