【发布时间】:2020-04-23 13:34:51
【问题描述】:
我想根据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
【问题讨论】:
-
你是如何计算
is_last_status的? -
@zealous 查看编辑