首页 > 解决方案 > SQL根据最早/最晚日期创建标志

问题描述

我有一个具有以下属性的数据集: - ID 不是唯一的,并且有多行 - 每个 ID 都有一个不同的日期,称为“开始日期”

我正在尝试添加一个标志 (Y/N) 来根据最早的日期确定要使用的 ID 行。

这是我到目前为止所拥有的:

SELECT *,
min(Start_Date) OVER (PARTITION BY ID) AS FirstEntryFlag,
From `table`

有人可以指导我如何实现这一目标吗?谢谢

标签: sql

解决方案


这是你想要的吗?

select (case when start_date = min(Start_Date) OVER (PARTITION BY ID) 
             then 1 else 0
        end) as FirstEntryFlag
from t;

如果开始日期有重复的 id 并且您只想标记一行,请使用row_number()

select (case when 1 = row_number() over (partition by id order by Start_Date) 
             then 1 else 0
        end) as FirstEntryFlag
from t;

最后,一些数据库支持布尔类型,所以case没有必要。只是条件表达式可以返回一个有效值。


推荐阅读