#sql
Вопрос:
Итак, у меня есть пример таблицы, как показано ниже:
ID | Категория | Приемная | Дата выписки |
---|---|---|---|
A1 | A | 2017-07-20 | 2017-07-21 |
A1 | B | 2017-07-27 | 2017-07-28 |
Я хотел бы выбрать минимальную и максимальную дату, а также создать два новых столбца на основе минимальной и максимальной даты, как показано ниже:
ID | MinAdmissionDate | MaxDischargeDate | Принятая категория | Категория разрядки |
---|---|---|---|---|
A1 | 2017-07-20 | 2017-07-28 | A | B |
Допустимая категория будет основана на минадиссиондате, в то время как категория разрядки будет основана на максимальном разряде
Ответ №1:
Вы можете попробовать присоединиться к сгруппированной таблице:
select
grouped.ID,
grouped.AdmissionDate,
grouped.DischargeDate,
admission.Category admissionCategory,
discharge.Category dischargeCategory
from
(
select
ID,
min(AdmissionDate) AdmissionDate,
max(DischargeDate) DischargeDate
from testTable
group by ID
) [grouped]
left join testTable [admission] on
[grouped].ID = [admission].ID and
[grouped].AdmissionDate = [admission].AdmissionDate
left join testTable [discharge] on
[grouped].ID = [discharge].ID and
[grouped].DischargeDate = [discharge].DischargeDate
Скрипка с базой данных.
Ответ №2:
Попробуйте что-нибудь вроде этого:
WITH cte As
(
SELECT
ID,
Category,
AdmissionDate,
DischargeDate,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY AdmissionDate) As ARN,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DischargeDate DESC) As DRN
FROM
YourTable
)
SELECT
A.ID,
A.AdmissionDate As MinAdmissionDate,
D.DischargeDate As MaxDischargeDate,
A.Category As AdmittedCategory,
D.Category As DischargeCategory
FROM
cte As A
INNER JOIN cte As D
ON D.ID = A.ID
And A.ARN = 1
And D.DRN = 1
;