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
这是否满足您的需求?
我的 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
这是否满足您的需求?