Sql server 获取FirstEntryDate及其相关薪资包信息

Sql server 获取FirstEntryDate及其相关薪资包信息,sql-server,tsql,Sql Server,Tsql,我有以下查询返回EmployeeId=4509的薪资包信息: SELECT SalaryPackageId, StartDate FROM SalaryPackage.SalaryPackage WHERE EmployeeId = 4509 AND IsDisabled = 0 AND StatusId IN (1,2) ORDER BY StartDate; SalaryPackageId StartDate 7964 2015-02-23 00:00:00.000

我有以下查询返回EmployeeId=4509的薪资包信息:

SELECT SalaryPackageId,
StartDate
FROM SalaryPackage.SalaryPackage 
WHERE EmployeeId = 4509 AND IsDisabled = 0 AND StatusId IN (1,2)
ORDER BY StartDate;
SalaryPackageId StartDate
7964            2015-02-23 00:00:00.0000000
EmployeeId  SalaryPackageId FirstEntryDate
4509        7964            2015-02-23 00:00:00.0000000
4509        12138           2015-02-23 00:00:00.0000000
4509        11763           2015-02-23 00:00:00.0000000
4509        15498           2015-02-23 00:00:00.0000000
4509        19186           2015-02-23 00:00:00.0000000
4509        23254           2015-02-23 00:00:00.0000000
4509        33821           2015-02-23 00:00:00.0000000
4509        44478           2015-02-23 00:00:00.0000000
结果如下:

SalaryPackageId StartDate
7964            2015-02-23 00:00:00.0000000
12138           2015-09-14 00:00:00.0000000
11763           2015-10-01 00:00:00.0000000
15498           2016-10-01 00:00:00.0000000
19186           2017-04-01 00:00:00.0000000
23254           2017-10-01 00:00:00.0000000
33821           2018-09-14 00:00:00.0000000
44478           2019-09-14 00:00:00.0000000
首次入职日期定义为第一个薪资包的日期,最低日期为EmployeeId=4509:

SELECT SalaryPackageId,
StartDate
FROM SalaryPackage.SalaryPackage 
WHERE EmployeeId = 4509 AND IsDisabled = 0 AND StatusId IN (1,2)
ORDER BY StartDate;
SalaryPackageId StartDate
7964            2015-02-23 00:00:00.0000000
EmployeeId  SalaryPackageId FirstEntryDate
4509        7964            2015-02-23 00:00:00.0000000
4509        12138           2015-02-23 00:00:00.0000000
4509        11763           2015-02-23 00:00:00.0000000
4509        15498           2015-02-23 00:00:00.0000000
4509        19186           2015-02-23 00:00:00.0000000
4509        23254           2015-02-23 00:00:00.0000000
4509        33821           2015-02-23 00:00:00.0000000
4509        44478           2015-02-23 00:00:00.0000000
我想获得每个员工的工资包ID,第一次入职日期如下:

SELECT  EmployeeId,
SalaryPackageId,
MIN(StartDate) OVER (PARTITION BY EmployeeId) AS FirstEntryDate
FROM SalaryPackage.SalaryPackage 
WHERE EmployeeId = 4509 AND IsDisabled = 0 AND StatusId IN (1,2)
但我得到了如下重复结果(对于EmployeeId=4509):

预期产量为

EmployeeId  SalaryPackageId FirstEntryDate
4509        7964            2015-02-23 00:00:00.0000000

您可以使用
行编号

WITH cte AS (
  SELECT  EmployeeId,SalaryPackageId,StartDate,
  ROW_NUMBER() OVER (PARTITION BY EmployeeId ORDER BY FirstEntryDate, SalaryPackageId) AS rn
  FROM SalaryPackage.SalaryPackage 
  WHERE EmployeeId = 4509 AND IsDisabled = 0 AND StatusId IN (1,2)
        -- here EmployeeId should be removed
)
SELECT *
FROM cte
WHERE rn = 1

我发现我把事情搞复杂了!非常感谢。