SQL-从另一个选择的两列中选择具有唯一值的第一行

时间:2019-03-07 23:30:11

标签: sql

我有以下查询,以从SQL视图中选择有趣的行:

SELECT *
from INT115_Payroll_Integration_Employment
WHERE (Employment_ExecutionId = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1' 
OR EmploymentDetail_ExecutionID = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1' 
OR EmploymentTerm_ExecutionID = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1' 
OR EmploymentComp_ExecutionID = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1')
AND Worker_Type = '1'
ORDER BY PERSONNELNUMBER ASC, SYNCSTARTDATETIME DESC, Employment_EndDate DESC, Employment_StartDate DESC

Result select

现在,我想从上述结果中获得唯一的PERSONNELNUMBER + EmploymentDetail_RecId的每个实例的第一行。

从这里类似的问题中得到启发后,我已经完成了对视图中所有行的操作,但是没有对第一次选择的行进行操作。

SELECT *
FROM   (
         SELECT *
                , rn = ROW_NUMBER() OVER (PARTITION BY e.EmploymentDetail_RecId ORDER BY e.PERSONNELNUMBER ASC, EmploymentDetail_RecId ASC, e.SYNCSTARTDATETIME DESC, e.Employment_EndDate DESC, e.Employment_StartDate DESC)
         FROM   INT115_Payroll_Integration_Employment e
       ) e
WHERE 
rn = 1
ORDER BY PERSONNELNUMBER ASC,  EmploymentDetail_RecId ASC, SYNCSTARTDATETIME DESC, Employment_EndDate DESC, Employment_StartDate DESC

Select over partition

如何将两个查询合并为一个查询,使其仅返回我想要的两行?

更新

就像LukStorms建议的那样,只需在第二个查询的子查询中添加第一个查询的WHERE子句就很简单。谢谢。

SELECT *
FROM   (
         SELECT *
                , rn = ROW_NUMBER() OVER (PARTITION BY e.EmploymentDetail_RecId ORDER BY e.PERSONNELNUMBER ASC, EmploymentDetail_RecId ASC, e.SYNCSTARTDATETIME DESC, e.Employment_EndDate DESC, e.Employment_StartDate DESC)
         FROM   INT115_Payroll_Integration_Employment e
         WHERE (Employment_ExecutionId = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1' 
         OR EmploymentDetail_ExecutionID = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1' 
         OR EmploymentTerm_ExecutionID = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1' 
         OR EmploymentComp_ExecutionID = 'Worker information-2019-03-06T02:49:49-4526155B07EC4FFD9A01DB540C9259C1')
         AND Worker_Type = '1'
       ) e
WHERE 
rn = 1
ORDER BY PERSONNELNUMBER ASC,  EmploymentDetail_RecId ASC, SYNCSTARTDATETIME DESC, Employment_EndDate DESC, Employment_StartDate DESC

0 个答案:

没有答案
相关问题