SQL — Выбрать первые строки с уникальными значениями в двух столбцах из другого выбора

#sql

#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
  

Результат выбора

Теперь я хочу получить первые строки каждого экземпляра уникального PERSONNELNUMBER EmploymentDetail_RecId из приведенного выше результата.

Мне удалось сделать это для всех строк в представлении после некоторого вдохновения из аналогичных вопросов здесь, но не для строк из первого select.

 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
  

Выберите поверх раздела

Как мне объединить два запроса в один, чтобы он возвращал только те две строки, которые я хочу?

Обновить

Это было так же просто, как добавить предложение WHERE первого запроса в подзапрос второго запроса, как предложил LukStorms. Спасибо.

 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
  

Комментарии:

1. Разве это не так же просто, как поместить все предложение WHERE первого запроса в подзапрос второго запроса?

2. Я действительно думал, что пробовал это. Теперь я чувствую себя действительно глупо.