SQL 计算 Redshift 中的总持续时间

SQL to Calculate Total Duration in Redshift

我的 redshift table 中有持续时间字段,定义为 varchar 字段,数据在下面的格式中(hours:minutes:seconds:microseconds):

示例:

Duration
00:00:02.696000
00:04:04
00:01:04.127000
04:03:02.063000
00:03:08.300000
00:05:05
00:01:00.150000
32:01:03.200000

我需要找出总持续时间。有些持续时间超过 24 小时

我们有任何 SQL 可以计算 hours:minutes:seconds:microseconds 的总持续时间吗?

在上述情况下,总数约为。 --> 36:18:28 这是 36 小时 18 分 28 秒和几微秒。

这在 Redshift 中可以用 SQL 实现。您拥有的字符串可以转换为 INTERVAL 数据类型——这是一种有效的中间数据类型,但值不能作为这种类型存储到表中。一旦投放这些间隔值就可以求和。这是您数据中的一个简单测试用例;

CREATE TABLE NEW_TEST 
(dur   VARCHAR(100)
);

INSERT INTO NEW_TEST
VALUES
('00:00:02.696000'),
('00:04:04'),
('00:01:04.127000'),
('04:03:02.063000'),
('00:03:08.300000'),
('00:05:05'),
('00:01:00.150000'),
('32:01:03.200000');

select sum(dur::interval) from NEW_TEST;

最后的 SQL select 语句产生结果:

 1 day 12:18:29.536

现在这是正确答案,但不是您想要的格式。不幸的是,Redshift date/time 格式化函数不将间隔作为输入,因此这将是一个小手册。此声明满足您的需求:

select extract(hour from sum(dur::interval)) || ':' || 
    extract(min from sum(dur::interval)) - extract(hour from sum(dur::interval)) * 60 || ':' ||
    extract(sec from sum(dur::interval)) - extract(min from sum(dur::interval)) * 60 || '.' ||
    extract(usec from sum(dur::interval)) - extract(sec from sum(dur::interval)) * 1000000 as duration
from new_test;

此 SQL select 语句产生结果:

36:18:29.536000

这是否满足您的需求?