Oracle - sql - 日期差异 - 按列值

Posted

技术标签:

【中文标题】Oracle - sql - 日期差异 - 按列值【英文标题】:Oracle - sql - date difference - as per column value 【发布时间】:2021-09-04 21:19:19 【问题描述】:

我有下表,

ID start_date Stage
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 需要找到到达 Final 阶段的总天数。如果 ID 没有 Final_Stage,则结果将为“0”。如果某个 ID 有 Final Stage 可用,则需要在 Final_Stage 和 Initial_Stage 之间区分天数"

ID Start_to_Final_Stage_Days
56 0
77 1

【问题讨论】:

【参考方案1】:

您可以在条件句中使用 MIN[IMUM] 聚合,因为 Final_Stage 与 @ 一起按字母顺序在各个阶段中排在最前面987654324@函数为了将interval day to second转换成整数比如

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

【讨论】:

以上是关于Oracle - sql - 日期差异 - 按列值的主要内容,如果未能解决你的问题,请参考以下文章

按列值的前导字符对数据行进行分组

如何按列值分组应该只出现在第一行

查找两个日期之间的差异 Oracle SQL

计算 Oracle SQL 中 2 个日期/时间之间的差异

更新之前的Oracle SQL触发器,用于设置来自其他实体的列值

按列值分组的列值更新mysql排名