【问题标题】:Find date of first occurrence at the group level in SQL在 SQL 中的组级别查找第一次出现的日期
【发布时间】:2021-02-28 03:19:56
【问题描述】:

我希望构建一个查询,以在 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 VALUE FIRST_DATE
1 01-JUL-20 0 01-OCT-20
1 01-AUG-20 0 01-OCT-20
1 01-SEP-20 0 01-OCT-20
1 01-OCT-20 1 01-OCT-20
1 01-NOV-20 1 01-OCT-20
1 01-DEC-20 1 01-OCT-20
2 01-JUL-20 0 01-AUG-20
2 01-AUG-20 1 01-AUG-20
2 01-SEP-20 1 01-AUG-20

谢谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你可以使用min的解析版,结合case表达式:

    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,包括几个计算经过天数的版本,具体取决于您想要做什么。

    【讨论】:

    • 谢谢!后续问题:如果值在一个月内从 1 重置为 0,然后在下个月再次恢复为 1,我该如何修改它以选择 MOST RECENT 运行 value = 1 开始的第一个日期?跨度>
    【解决方案2】:
    SELECT id_field, MIN(DECODE(VALUE, 0, NULL, DATE_FIELD))
    FROM table_name
    GROUP BY id_field
    

    然后您可以将其用作更新语句的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2022-11-15
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多