如何根据条件设置每行的布尔值

how to set Boolean value per row based on condition

我想根据 role_end_date

在我的 table 上设置名为 is_last_status 的列

例如:

示例 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

我似乎找不到可以生成 is_last_status 的 SQL 我在处理间隙时遇到了困难。

逻辑是: is_last_status = True 只能有 1 行。 根据 role_start_date

,它应该是 table 中的最新行

所以在这两个示例中,最近的行是 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

使用 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