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

Sql 如何根据条件设置每行的布尔值,sql,presto,Sql,Presto,我想根据角色\u结束\u日期 例如: 例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 2

我想根据
角色\u结束\u日期

例如:

例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_状态的SQL
我在处理间隙方面遇到了困难

逻辑是: 只有一行的
是\u last\u status=True
。 它应该是基于
role\u start\u date

因此,在这两个示例中,最近的一行是
role\u start\u date='2020-02-08'
基本上,如果行的
role\u start\u date=Max(role\u start\u date)
设置为“上一次”状态为True,则其余为false。
role\u start\u 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

使用
行编号()尝试以下操作


你是如何计算你最后的状态的。我想知道是否有更简单的方法可以做到这一点。@HaloKu按照我的想法,使用
行数()
是最好的方法。如果这对您有效,请点击勾号接受。谢谢你认为这可以组合成一个查询,这样就不需要两个选择了吗?@HaloKu我不这么认为。对不起。
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