sql - SQL根据最早/最晚日期创建标志
问题描述
我有一个具有以下属性的数据集: - ID 不是唯一的,并且有多行 - 每个 ID 都有一个不同的日期,称为“开始日期”
我正在尝试添加一个标志 (Y/N) 来根据最早的日期确定要使用的 ID 行。
这是我到目前为止所拥有的:
SELECT *,
min(Start_Date) OVER (PARTITION BY ID) AS FirstEntryFlag,
From `table`
有人可以指导我如何实现这一目标吗?谢谢
解决方案
这是你想要的吗?
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
没有必要。只是条件表达式可以返回一个有效值。
推荐阅读
- jquery - 如何基于MVC JsonResult在页面加载时动态设置默认的boostrap选项卡
- ruby-on-rails - Rails - 为“/admin”添加自定义路由约束
- java - 无法从 JavaTable 获取单元格数据
- go - Go http 响应几个标头
- python - Django 模板:从显示用户列表中排除 request.user
- javascript - 未捕获的类型错误:未定义“绝对”。绝对是画布的定位
- css - 使引导导航栏黯然失色的空白区域
- haskell - 有条件地按顺序将函数应用于值
- javascript - 为什么会给出这样的结果?
- swift - 无法保存 UITableViewCell 的开/关状态?