【问题标题】:Creating a loop for modifying a variable while creating time buckets (Postgresql)在创建时间桶时创建用于修改变量的循环(Postgresql)
【发布时间】:2020-10-21 19:38:41
【问题描述】:

我正在计算第一次调用与创建客户 ID 之间的时间差。

我的查询如下所示:

case when (EXTRACT(EPOCH FROM call_time - creation_date) / 60)::Integer between 0 and 60 then '0 to 1'
     when (EXTRACT(EPOCH FROM call_time - creation_date)) / 60)::Integer between 60 and 120 then '1 to 2'
...

现在我的目标是创建存储桶,直到我点击“47 到 48”,这是一个非常乏味的过程,我想知道 Postgresql 用户是否有循环选项。

我的数据如下所示,我希望在其中创建一个桶列(蓝色),表示该时间差:

【问题讨论】:

    标签: sql postgresql performance loops time


    【解决方案1】:

    你可以使用算术。从小时数开​​始怎么样?

    FLOOR(EXTRACT(EPOCH FROM call_time - creation_date) / (60 * 60)) as hours
    

    如果你想在一个字符串中:

    (FLOOR(EXTRACT(EPOCH FROM call_time - creation_date) / (60 * 60)) || ' to ' ||  FLOOR(EXTRACT(EPOCH FROM call_time - creation_date) / (60 * 60)) + 1)
    

    如果您想将此限制在最大范围内,请使用 CASE 表达式:

    (CASE WHEN EXTRACT(EPOCH FROM call_time - creation_date) / (60 * 60) < 48
          THEN (FLOOR(EXTRACT(EPOCH FROM call_time - creation_date) / (60 * 60)) || ' to ' ||
                FLOOR(EXTRACT(EPOCH FROM call_time - creation_date) / (60 * 60)) + 1
               )
          ELSE 'WAY TOO LONG'
     END) as bucket
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2022-12-18
      • 2018-03-17
      • 2016-09-15
      • 2012-06-01
      相关资源
      最近更新 更多