如何解决表oracle sql的两列之间的时间差分组
[及时 超时时间
28-05-2020 16:55:54 28-05-2020 16:55:54
28-05-2020 17:04:08 28-05-2020 17:04:08
29-05-2020 23:10:46 29-05-2020 23:10:46
01-06-2020 12:52:06 01-06-2020 12:52:06
01-06-2020 12:53:11
01-06-2020 13:00:39 01-06-2020 13:00:39
01-06-2020 13:10:43 01-06-2020 13:10:44
28-05-2020 16:55:54
oracle sql表如何在两列中显示一些时间戳。
我想在这两列中以毫秒为单位计算出时间差,然后仅当时间差小于1000毫秒且两列都具有有效的时间值时,才根据毫秒差将它们分组为计数。 >
进出差(毫秒) 计数
3000 10
20 111
1 1000
10000 3
] 1
解决方法
不幸的是,Oracle没有提供一种简单的方法来从另一个时间戳中减去一个时间戳并以毫秒为单位给出答案。以下代码应为您提供所需的信息;我使用CTE将其分为几步,只是为了使其易于遵循,但您可以简化它。
WITH T1 AS ( -- CALCULATE TIME IN ms BETWEEN EACH TIMESTAMP
SELECT
IN_TIME,OUT_TIME,extract( day from (OUT_TIME - IN_TIME) )*24*60*60*1000 +
extract( hour from (OUT_TIME - IN_TIME) )*60*60*1000 +
extract( minute from (OUT_TIME - IN_TIME) )*60*1000 +
round(extract( second from (OUT_TIME - IN_TIME) )*1000) TOTAL_MS
FROM DATA1
),T2 AS ( -- FILTER TO INCLUDE ONLY THOSE RECORDS WITHIN THE REQUIRED DURATION
SELECT
IN_TIME,TOTAL_MS
FROM T1
WHERE TOTAL_MS > 0 AND TOTAL_MS < 1000
)
SELECT TOTAL_MS,COUNT(1) FROM T2
GROUP BY TOTAL_MS
;
更新1
实际上,以下方法有效且简单得多:
(OUT_TIME - IN_TIME)*24*60*60*1000 AS TOTAL_MS
您还可以使用WHERE子句从第一个SELECT中排除“无效”记录:
WHERE OUT_TIME IS NOT NULL AND IN_TIME IS NOT NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。