sql - 在 SQL 中的组级别查找第一次出现的日期
问题描述
我希望构建一个查询,以在 ID 级别首次记录特定事件时检索日期字段。下面的“FIRST_DATE”字段是我想要实现的。
在此示例中,2020 年 10 月是 ID_FIELD 1 具有非零值的第一个日期,因此 2020 年 10 月作为所有 ID_FIELD 1 行的 FIRST_DATE 应用。目的是能够计算从 ID 的值从 0 变为 1 所经过的时间量。使用 Oracle SQL Developer。
ID_FIELD | DATE_FIELD | 价值 | 第一次约会 |
---|---|---|---|
1 | 20 年 7 月 1 日 | 0 | 01-OCT-20 |
1 | 20 年 8 月 1 日 | 0 | 01-OCT-20 |
1 | 01-SEP-20 | 0 | 01-OCT-20 |
1 | 01-OCT-20 | 1 | 01-OCT-20 |
1 | 20 年 11 月 1 日 | 1 | 01-OCT-20 |
1 | 20 年 12 月 1 日 | 1 | 01-OCT-20 |
2 | 20 年 7 月 1 日 | 0 | 20 年 8 月 1 日 |
2 | 20 年 8 月 1 日 | 1 | 20 年 8 月 1 日 |
2 | 01-SEP-20 | 1 | 20 年 8 月 1 日 |
谢谢!
解决方案
您可以使用 的分析版本min
,结合案例表达式:
select id_field, date_field, value,
min(case when value != 0 then date_field end) over (partition by id_field) as first_date
from your_table;
db<>fiddle,包括几个计算经过天数的版本,具体取决于您想要做什么。
推荐阅读
- angular - 有没有办法将承载令牌添加到标头而不是 SignalR 中的参数?
- oracle - ORA-01109 运行脚本时数据库未打开错误
- authentication - 无法将本地用户与 LDAP 一起使用
- looker - Looker - 获取所有原始 SQL 查询或表使用情况
- html - 如何在表单中保持多个按钮内联?
- ruby - 为什么 hello_world 在 Ubuntu 上的 Ruby 中不起作用?
- vaadin - Vaadin Dataprovider:如何避免“自动获取”?
- asp.net-core - 如何在 Quartz JobListener 中使用 DI?
- c# - 将图像与 webforms asp.net 中的其他字段一起添加到数据库
- python - 如何从 scipy.optimize 设置 curve_fit 的最大迭代次数?