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