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

如何在Snowflake中获取各部门最新Timestamp_NTZ对应的记录

解决Snowflake中获取每个部门最新记录的SQL问题

你原来的SQL报错是因为聚合函数(比如MAX)和非聚合列同时出现在SELECT里时,所有非聚合列必须加入GROUP BY子句。就算你把DEPTID、EFF_STATUS、DESCR都加到GROUP BY里,也可能拿不到正确结果——如果同一部门同一最新时间有多条不同状态或描述的记录,或者你需要的是对应最新时间的那条完整记录,而不是聚合后的字段。

要获取每个部门的最新记录,用**窗口函数+分区(PARTITION BY)**是最靠谱的方法。具体用ROW_NUMBER()函数,按部门(DEPTID)分区,按生效时间(EFFDT)降序排序,这样每个分区里最新的记录会被标记为1,最后筛选出标记为1的记录即可。

最终SQL语句

WITH ranked_depts AS (
    SELECT 
        DEPTID,
        EFFDT,
        EFF_STATUS,
        DESCR,
        -- 按部门分区,按EFFDT倒序排,最新的记录排第1
        ROW_NUMBER() OVER (PARTITION BY DEPTID ORDER BY EFFDT DESC) AS rn
    FROM "DATA_LAKE"."PS_FS"."PS_DEPT_TBL"
)
SELECT DEPTID, EFFDT, EFF_STATUS, DESCR
FROM ranked_depts
WHERE rn = 1;

代码说明

  • PARTITION BY DEPTID:将数据按部门分组,每个部门单独处理
  • ORDER BY EFFDT DESC:每个部门内按生效时间从新到旧排序
  • ROW_NUMBER():给每个部门内的记录编序号,最新的记录序号为1
  • 最后筛选rn=1的记录,就是每个部门的最新数据

如果同一部门有多个记录的EFFDT完全相同(比如同一时间更新了多条),ROW_NUMBER()会随机选一条;如果想保留所有同时间的最新记录,可以换成RANK()或者DENSE_RANK()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:50:27