sql—创建一个用于在创建时间段时修改变量的循环(postgresql)

l3zydbqr  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(376)

我正在计算第一次呼叫和创建客户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'
...

现在我的目标是创建bucket,直到达到'47到48',这是一个非常乏味的过程,我想知道是否有一个postgresql用户的循环选项。
我的数据如下所示,其中我希望创建一个bucket列(蓝色),表示时间差:

f5emj3cl

f5emj3cl1#

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

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

相关问题