как установить логическое значение для строки на основе условия - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу установить столбец с именем is_last_status в моей таблице на основе role_end_date

Например:

Пример 1:

role_end_date role_start_date   row_id     id is_last_status

null           2020-02-08   7_2020-02-08    7   true

2020-02-07     2019-11-05   7_2019-11-05    7   false

2019-11-05     2019-07-16   7_2019-07-16    7   false

2019-07-16     2019-05-28   7_2019-05-28    7   false

2019-05-24     2019-04-24   7_2019-04-24    7   false

Пример 2 :

role_end_date role_start_date   row_id     id is_last_status

2020-04-01     2020-02-08   6_2020-02-08    6   true

2020-01-01     2020-01-01   6_2020-01-01    6   false

Кажется, я не могу найти SQL, который может генерировать is_last_status У меня проблемы с пробелами.

Logi c is: Может быть только 1 строка с is_last_status = True. Это должна быть самая последняя строка в таблице, основанная на role_start_date

Так что в обоих примерах самая последняя строка - role_start_date = '2020-02-08' В основном, если строка имеет role_start_date=Max(role_start_date), установите для is_last_status значение True, остальные - false. role_start_date уникален для id.

Я должен быть что-то с:

SELECT
    role_end_date
    ,role_start_date
    ,row_id
    ,id
    ,LEAD(role_start_date) OVER (PARTITION BY id ORDER BY role_end_date) as is_last_status
FROM my_table

Я использую Presto

1 Ответ

1 голос
/ 23 апреля 2020

Попробуйте следующее, используя row_number()

select
        role_end_date
        ,role_start_date
        ,row_id
        ,id
        ,case when rnk = 1 then 'true' else 'false' end as is_last_status
from
(
    select
        role_end_date
        ,role_start_date
        ,row_id
        ,id
        ,row_number() over (partition by id order by role_start_date desc) as rnk
    from my_table
) val
order by
    role_start_date desc
...