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

SQL如何按workstation、Branch、inits分组查询各组最新创建记录

解决思路

你需要用窗口函数实现分组取TOP N的需求,针对你的场景(每个workstation/Branch/Inits分组取最新1条记录),推荐使用ROW_NUMBER()窗口函数实现,这是SQL领域处理这类需求的通用方案。

可直接复用的SQL示例
SELECT workstation, 
       branch, 
       Inits, 
       document, 
       [DateTime]
FROM (
    -- 内层查询给每个分组的记录按时间倒序打序号
    SELECT 
        workstation, 
        branch, 
        Inits, 
        document, 
        [DateTime],
        ROW_NUMBER() OVER (
            PARTITION BY workstation, Branch, Inits -- 按你需要的三个字段分组
            ORDER BY [DateTime] DESC -- 组内按创建时间倒序,最新的排第一
        ) AS rn
    FROM iheads (nolock) 
    WHERE Inits = 'AAADB' 
      AND [datetime] >='2021-11-01 23:53:00.000' 
      AND [datetime] <= '2021-11-30 23:58:00.000'
) t
WHERE rn = 1 -- 只取每个分组排名第一的最新记录
ORDER BY Workstation DESC
说明
  • 如果你要调整分组维度,只需要修改PARTITION BY后面的字段即可
  • 如果同一个分组下存在多条完全相同时间的记录,ROW_NUMBER()会随机给其中一条标为1,如果你要保留所有同时间的最新记录,可以把ROW_NUMBER()换成RANK()
  • 你调试完成后删除document字段、替换WHERE条件为动态参数即可,不需要调整核心逻辑
  • 你之前用TOP 1只返回全局1条、GROUP BY报错是因为普通GROUP BY要求所有非聚合字段都出现在GROUP BY列表里,没法直接取对应最新时间的其他字段,窗口函数刚好解决了这个场景的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:01