#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. Я действительно думал, что пробовал это. Теперь я чувствую себя действительно глупо.