如何根据条件设置每行的布尔值
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
我想根据 role_end_date
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
所以在这两个示例中,最近的行是 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