我的数据结果集格式如下图所示,
对于同一个 bill_no ,我需要找到状态 id 1200 和 1350 之间的时间差(格式为小时:分钟:秒)。时间差是根据相应状态 id 的“datetime”列计算的。正在寻找 MSSQL 和 Oracle 的查询。
甲骨文:
下面是 Oracle 代码计算同一 BILL_NO 的每一行与 BILL_NO 第一行的时间差 (hh24:mi:ss)
WITH -- S a m p l e D a t a :
tbl (STATUSID, REASON, DATETIME, BILL_NO) AS
( Select 1200, 'AVPR-PJMBIF01:BF18', To_Date('2023-12-23 05:07:37', 'yyyy-mm-dd hh24:mi:ss'), 'TRIAL-54467880555' From Dual Union All
Select 1325, 'PDF bill generation started', To_Date('2023-12-23 05:07:37', 'yyyy-mm-dd hh24:mi:ss'), 'TRIAL-54467880555' From Dual Union All
Select 1375, 'Adding PDF decorations', To_Date('2023-12-23 05:07:38', 'yyyy-mm-dd hh24:mi:ss'), 'TRIAL-54467880555' From Dual Union All
Select 1350, 'PDF bill generated successfuly', To_Date('2023-12-23 05:07:38', 'yyyy-mm-dd hh24:mi:ss'), 'TRIAL-54467880555' From Dual
)
-- M a i n S Q L :
Select STATUSID, REASON, DATETIME, BILL_NO,
-- hours
LPAD(FLOOR((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24), 2, '0') || ':' ||
-- minutes
LPAD(FLOOR(((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24 * 60) -
(FLOOR((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24) * 60)), 2, '0') || ':' ||
-- seconds
LPAD(Round(((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24 * 60 * 60) -
(FLOOR((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24) * 60 * 60 ) -
((FLOOR(((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24 * 60) -
(FLOOR((DATETIME - FIRST_VALUE(DATETIME) Over(Partition By BILL_NO Order By DATETIME)) * 24) * 60))) * 60 ), 0), 2, '0') "SINCE_BILL_NO_START"
From tbl
/* R e s u l t :
STATUSID REASON DATETIME BILL_NO SINCE_BILL_NO_START
---------- ------------------------------ -------- ----------------- -------------------
1200 AVPR-PJMBIF01:BF18 23.12.23 TRIAL-54467880555 00:00:00
1325 PDF bill generation started 23.12.23 TRIAL-54467880555 00:00:00
1375 Adding PDF decorations 23.12.23 TRIAL-54467880555 00:00:01
1350 PDF bill generated successfuly 23.12.23 TRIAL-54467880555 00:00:01 */