SQL 查询 - 来自 ALN 字段的 SUM 持续时间值 (hh:mm:ss)
SQL query - SUM duration values (hh:mm:ss) from ALN field
我有 table 个 ID 为:
的 T1
ID
1
2
我有 table 个带 ID 和 GROUP_TRACKING 时间的 T2,因为记录可以在特定组多次。 GROUP_TRACKING 时间是 ALN 类型 (STRING) 且无法更改,但它始终包含 hh:mm:ss 中的持续时间值,其中 hh 列始终至少包含 2 个字符,但当然它可以包含更多字符以防万一记录已经是某个组很长一段时间了:
ID GROUP GROUP_TRACKING
1 GROUP1 05:55:05
1 GROUP1 10:10:00
1 GROUP2 111:51:00
1 GROUP2 01:01:00
所以我需要从 T1 table 中创建 SELECT 子句并加入 T2 table 跟踪每个组(G1 和 G2)在该特定组上花费了多少时间。
所以最后的结果应该是这样的:
ID GROUP1 GROUP2
1 16:05:05 112:52:00
2 null null
如何计算这些时长的 SELECT SUM?
谢谢
这里有一个没有 pivot 步骤的解决方案(可以在许多其他答案中查找)
with temp as (
select id
, group
, group_tracking
, SUBSTR(group_tracking, 1,LOCATE(':',group_tracking)-1) * 3600 as First_PART_in_s
, SUBSTR(group_tracking, LOCATE(':',group_tracking)+1,2) * 60 as Second_PART_in_s
, SUBSTR(group_tracking, LOCATE(':',group_tracking, LOCATE(':',group_tracking)+1)+1, 2) as Third_PART_in_s
from t2
)
select t1.id
, t.group
, int(sum(First_PART_in_s + Second_PART_in_s + Third_PART_in_s) / 360000) || replace(char(time('00:00:00') + mod(sum(First_PART_in_s + Second_PART_in_s + Third_PART_in_s),360000) seconds,ISO),'.',':') as duration
from t1
left join temp t
on t1.id = t.id
group by t1.id, group
我完全同意@Clockwork-Muse 格式很重要,使用这种不适当的格式会在重新格式化或解构和 re-constructing 事情上付出很多额外的努力。
我有 table 个 ID 为:
的 T1ID
1
2
我有 table 个带 ID 和 GROUP_TRACKING 时间的 T2,因为记录可以在特定组多次。 GROUP_TRACKING 时间是 ALN 类型 (STRING) 且无法更改,但它始终包含 hh:mm:ss 中的持续时间值,其中 hh 列始终至少包含 2 个字符,但当然它可以包含更多字符以防万一记录已经是某个组很长一段时间了:
ID GROUP GROUP_TRACKING
1 GROUP1 05:55:05
1 GROUP1 10:10:00
1 GROUP2 111:51:00
1 GROUP2 01:01:00
所以我需要从 T1 table 中创建 SELECT 子句并加入 T2 table 跟踪每个组(G1 和 G2)在该特定组上花费了多少时间。
所以最后的结果应该是这样的:
ID GROUP1 GROUP2
1 16:05:05 112:52:00
2 null null
如何计算这些时长的 SELECT SUM?
谢谢
这里有一个没有 pivot 步骤的解决方案(可以在许多其他答案中查找)
with temp as (
select id
, group
, group_tracking
, SUBSTR(group_tracking, 1,LOCATE(':',group_tracking)-1) * 3600 as First_PART_in_s
, SUBSTR(group_tracking, LOCATE(':',group_tracking)+1,2) * 60 as Second_PART_in_s
, SUBSTR(group_tracking, LOCATE(':',group_tracking, LOCATE(':',group_tracking)+1)+1, 2) as Third_PART_in_s
from t2
)
select t1.id
, t.group
, int(sum(First_PART_in_s + Second_PART_in_s + Third_PART_in_s) / 360000) || replace(char(time('00:00:00') + mod(sum(First_PART_in_s + Second_PART_in_s + Third_PART_in_s),360000) seconds,ISO),'.',':') as duration
from t1
left join temp t
on t1.id = t.id
group by t1.id, group
我完全同意@Clockwork-Muse 格式很重要,使用这种不适当的格式会在重新格式化或解构和 re-constructing 事情上付出很多额外的努力。