Oracle - sql - 日期差异 - 根据列值

时间:2021-06-21 07:25:37

标签: sql oracle group-by

我有下表,

<头>
ID 开始日期 阶段
56 07-JUN-21 03.13.44.4490000 Initial_Stage
77 08-JUN-21 06.28.14.0000000 Initial_Stage
77 08-JUN-21 07.28.14.0000000 Middle_Stage
77 09-JUN-21 06.28.14.0000000 Final_Stage

所需输出:

根据 ID 需要找到达到最终阶段的总天数。如果 ID 没有 Final_Stage,则结果将为“0”。如果某个 ID 有可用的 Final Stage,则需要将 Final_Stage 与 Initial_Stage 相差天数"

<头>
ID Start_to_Final_Stage_Days
56 0
77 1

1 个答案:

答案 0 :(得分:0)

您可以在条件中使用 MIN[IMUM] 聚合,因为 Final_Stage 在各个阶段之间按字母顺序排在最前面使用 EXTRACT() 函数将间隔天到秒转换为整数,例如

SELECT ID, 
       DECODE( MIN(stage), 'Final_Stage', 
               EXTRACT(DAY FROM MIN( CASE WHEN stage = 'Final_Stage' THEN start_date END ) -
                                MIN( CASE WHEN stage = 'Initial_Stage' THEN start_date END) ),0)
           AS "Start_to_Final_Stage_Days"                               
  FROM t
 GROUP BY ID 
 ORDER BY ID;
<头>
ID Start_to_Final_Stage_Days
56 0
77 1

Demo

相关问题