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

SQL Server 2014单查询语句获取最小ProcessStepTwoDtTm及关联字段

实现方式说明

当然可以用单条SELECT语句实现你的需求,而且有几种适合SQL Server 2014的简洁写法,下面给你详细介绍:

方法1:使用TOP 1 WITH TIES(最简洁的单条语句)

这种方式不需要嵌套子查询,直接在主SELECT里就能完成分组取最小行的需求,非常贴合你的场景:

SELECT TOP 1 WITH TIES
    Id, ProcessStepOneDtTm, ProcessStepTwoStaffId, ProcessStepTwoDtTm
FROM YourTableName
ORDER BY ROW_NUMBER() OVER(PARTITION BY ProcessStepOneDtTm ORDER BY ProcessStepTwoDtTm ASC)

原理是TOP 1 WITH TIES会返回所有排序后行号为1的记录,刚好对应每个ProcessStepOneDtTm分组里ProcessStepTwoDtTm最小的那一行。

方法2:优化你的子查询写法(依然是单条语句)

你当前的嵌套子查询写法其实已经是单条SELECT语句了,我帮你修正了字段名的小疏漏(原语句里的StaffId应该是ProcessStepTwoStaffId),并调整得更规范:

SELECT Id, ProcessStepOneDtTm, ProcessStepTwoStaffId, ProcessStepTwoDtTm
FROM (
    SELECT 
        Id, ProcessStepOneDtTm, ProcessStepTwoStaffId, ProcessStepTwoDtTm,
        ROW_NUMBER() OVER(PARTITION BY ProcessStepOneDtTm ORDER BY ProcessStepTwoDtTm ASC) AS RowNum
    FROM YourTableName
) AS RankedData
WHERE RowNum = 1

这种写法逻辑清晰,适合后续需要扩展复杂排序或过滤规则的场景,同样属于单条SELECT语句的范畴。

方法3:使用关联子查询

另一种单条SELECT的实现方式是用关联子查询匹配分组内最小的ProcessStepTwoDtTm:

SELECT 
    t1.Id, t1.ProcessStepOneDtTm, t1.ProcessStepTwoStaffId, t1.ProcessStepTwoDtTm
FROM YourTableName t1
WHERE t1.ProcessStepTwoDtTm = (
    SELECT MIN(t2.ProcessStepTwoDtTm)
    FROM YourTableName t2
    WHERE t2.ProcessStepOneDtTm = t1.ProcessStepOneDtTm
)

注意:如果同一个ProcessStepOneDtTm分组里存在多个相同的最小ProcessStepTwoDtTm值,这种方式会返回所有匹配的行;而前两种用ROW_NUMBER()的方法只会返回其中一行(如果需要保留所有相同最小值的行,可以把ROW_NUMBER()换成RANK())。

根据你的期望输出,方法1和方法2都能精准得到你想要的结果,其中方法1的写法最为简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:22:40