在一条select语句中选择最短日期和相关字段

时间:2019-02-09 12:35:10

标签: sql sql-server-2014

我想选择最小的ProcessStepTwoDtTm和关联的ProcessStepTwoStaffId,但想知道是否有可能在单个select语句中做到这一点?我正在使用sql server 2014。

数据集

Id  ProcessStepOneDtTm  ProcessStepTwoStaffId    ProcessStepTwoDtTm
1   2/2/2019            615                      4/2/2019  
2   2/2/2019            232                      5/2/2019 

所需的输出

Id  ProcessStepOneDtTm  ProcessStepTwoStaffId    ProcessStepTwoDtTm
1   2/2/2019            615                      4/2/2019  

目前我有:

SELECT *
FROM
(
SELECT Id
       , ProcessStepOneDtTm
       , StaffId
       , ProcessStepTwoDtTm
       , ROW_NUMBER() OVER(PARTITION BY ProcessStepOneDtTm ORDER BY 
           ProcessStepTwoDtTm) as RowNum
) 
WHERE RowNum = 1

有没有办法在单个select语句中做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用top with ties

SELECT TOP (1) WITH TIES  . . .           
FROM ?
ORDER BY ROW_NUMBER() OVER (PARTITION BY ProcessStepOneDtTm ORDER BY ProcessStepTwoDtTm)

我认为这样做的性能比您的情况要差一些。为了获得最佳性能,关联的子查询通常效果最好:

select t.*
from t
where t.ProcessStepTwoDtTm = (select min(t2.ProcessStepTwoDtTm)
                              from t t2
                              where t2.ProcessStepOneDtTm = t.ProcessStepOneDtTm
                             );

为了提高性能,您需要在(ProcessStepOneDtTm, ProcessStepTwoDtTm)上建立索引。

答案 1 :(得分:0)

您可以使用下面的单行查询

Cannot convert value of type '(_) -> Observable<[City]>' to expected argument type '(CLLocationCoordinate2D) -> SharedSequence<_, _>'