Как выбрать минимальную и максимальную дату из таблицы в другую таблицу в той же строке? в SQL

#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
;
 

ДЕМОНСТРАЦИЯ
НОМЕР СТРОКИ