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

SQL Server含聚合函数时不使用GROUP BY选取指定字段的咨询

解决方案

你可以使用SQL Server提供的ROW_NUMBER()窗口函数实现需求,无需将额外字段加入GROUP BY子句,即可获取每个分组最新时间戳对应的tcon.Inductive_Injection_Hours、tcon.Capacitive_Injection_Hours字段值。

修改后的查询代码如下:

WITH RankedTelData AS (
    SELECT 
        bp.Serial_Number, 
        tcon.Serial_Number AS ConverterSerialNumber, 
        tcon.Time_Stamp AS DateStamp,  
        tcon.Inductive_Injection_Hours, 
        tcon.Capacitive_Injection_Hours,
        -- 按指定维度分组,组内按时间戳倒序排名,最新记录排名为1
        ROW_NUMBER() OVER (
            PARTITION BY bp.Serial_Number, tcon.Serial_Number 
            ORDER BY tcon.Time_Stamp DESC
        ) AS rn
    FROM 
        dbo.Bypass AS bp 
    INNER JOIN 
        dbo.Converter AS c ON bp.Bypass_ID = c.Bypass_ID 
    INNER JOIN 
        dbo.Converter_Tel_Data AS tcon ON c.Converter_ID = tcon.Converter_ID
    WHERE 
        bp.Site_ID = 7
)
SELECT 
    Serial_Number,
    ConverterSerialNumber,
    DateStamp,
    Inductive_Injection_Hours,
    Capacitive_Injection_Hours
FROM RankedTelData
WHERE rn = 1
ORDER BY ConverterSerialNumber

逻辑说明

  • 我们通过公共表表达式(CTE)先给所有匹配的记录做分组排名:PARTITION BY后填写的就是你需要的分组维度,不需要包含两个小时统计字段
  • 组内按Time_Stamp倒序排序,保证每组内最新时间戳的记录排名为1
  • 最后仅筛选排名为1的记录,即可得到每个分组最新时间戳对应的所有字段值,全程不需要使用GROUP BY子句

如果你的业务场景中存在多条完全相同的最大时间戳记录,且需要全部保留,只需要把ROW_NUMBER()替换为RANK()即可。

内容的提问来源于stack exchange,提问作者Sheikh Umair Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:04