【问题标题】:SQL query - SUM duration values (hh:mm:ss) from ALN fieldSQL 查询 - 来自 ALN 字段的 SUM 持续时间值 (hh:mm:ss)
【发布时间】:2018-02-12 12:05:47
【问题描述】:

我有带有 ID 的表 T1:

ID
1
2

我有 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 表中创建 SELECT 子句,并加入 T2 表以跟踪每个组(G1 和 G2)在该特定方面花费了多少时间组。

所以最终的结果应该是这样的:

ID  GROUP1    GROUP2
1   16:05:05  112:52:00
2   null      null

如何以小时和分钟计算这些持续时间的SELECT SUM?

谢谢

【问题讨论】:

  • ....人们为什么要这样对自己?为什么不让这该死的事情以秒为单位,让查询这些东西变得更容易呢?它不是 SARGable(b/c > 2 位数),占用了两倍的房间。在任何情况下,您都必须在分隔符上拆分字符串,手动将其转换为秒,求和,然后将其转换回各个部分(因为您可能不想要 60 多秒,而是 1 分钟...)。然后转动它。顺便说一句,你必须提前知道列,或者使用一些讨厌的动态 sql。
  • @Clockwork-Muse 你能帮我处理这个 SQL 语句吗?不幸的是,这是系统自动填充的开箱即用列,我无法更改其定义。提前谢谢你
  • @Clockwork-Muse 你能写给我这个繁重的 SQL 查询吗?我什至不知道如何开始
  • ....我给了你一个你必须要做的步骤列表。你被哪一个卡住了?您是否无法找到有关如何执行某些部分的信息?
  • @Clockwork-Muse 嗨,我遇到了拆分和转换问题。我现在不知道如何开始。我也不确定如何转动它。提前谢谢你

标签: string select db2 duration


【解决方案1】:

这是一个没有枢轴步骤的解决方案(可以在许多其他分析器中查找)

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 的观点,即格式很重要,使用这种不恰当的格式会为重新格式化或解构和重建事物带来大量额外的努力。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2011-10-07
    • 1970-01-01
    • 2021-11-30
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多