Sql server 获取FirstEntryDate及其相关薪资包信息
我有以下查询返回EmployeeId=4509的薪资包信息: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
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
我发现我把事情搞复杂了!非常感谢。