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 - 日期差异 - 按列值的主要内容,如果未能解决你的问题,请参考以下文章