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

使用DATEADD函数时如何按条件选取分组内最新插入的NUM_DAY值

实现方案

方案1:使用窗口函数(兼容绝大多数主流SQL引擎,如MySQL 8.0+、PostgreSQL、Spark SQL等)

先通过ROW_NUMBER()窗口函数对每个number_id下的记录按added_timestap倒序排序,取排序为1的最新记录,再执行日期计算:

WITH ranked_records AS (
    SELECT 
        number_id,
        NUM_DAY,
        MY_DATETIME,
        ROW_NUMBER() OVER (PARTITION BY number_id ORDER BY added_timestap DESC) AS rn
    FROM TBL1
)
SELECT 
    number_id,
    DATEADD('days', NUM_DAY, MY_DATETIME) AS LAST_DATETIME
FROM ranked_records
WHERE rn = 1;

方案2:子查询关联(兼容不支持窗口函数的低版本数据库,如MySQL 5.x)

先通过分组查询拿到每个number_id对应的最新added_timestap,再关联原表获取对应记录的字段值后计算:

SELECT 
    t.number_id,
    DATEADD('days', t.NUM_DAY, t.MY_DATETIME) AS LAST_DATETIME
FROM TBL1 t
INNER JOIN (
    SELECT number_id, MAX(added_timestap) AS latest_ts
    FROM TBL1
    GROUP BY number_id
) latest ON t.number_id = latest.number_id AND t.added_timestap = latest.latest_ts;

补充说明

  • 如果同一个number_id存在多条added_timestap完全相同的最新记录,方案1的ROW_NUMBER()会随机取其中一条,若需要保留所有匹配记录可将ROW_NUMBER()替换为RANK()
  • 若你的SQL方言中DATEADD函数的参数顺序/格式有差异,可根据实际使用的数据库调整函数写法即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:54:01