如何使用Postgresql获取持续时间

问题描述 投票:0回答:1

需要帮助如何使用PostgreSQL计算持续时间。在下面的示例中,假设某个人的位置是在特定时间记录的。

timestamp        location   
02JAN19:00:00:00 home
02JAN19:05:00:00 work1
02JAN19:06:00:00 work2
02JAN19:07:00:00 home

我只想保留这个人第一次不在家的位置,以及这个人在家外的位置。这个人在05:00到06:59 AM在家外面,我们想要计算这段时间。

因此,结果数据集如下:

timestamp location duration (in Minutes)
02JAN19:06:00:00 work2    119
postgresql duration
1个回答
0
投票

如果您想提取家中最长时间的差异和不在家的最短时间,您可以使用

max(case when location  = 'home' then  timestamp end ) 
     - min(case when location != 'home' then timestamp end )




SELECT extract(epoch FROM max(
     CASE
          WHEN location = 'home' THEN TIMESTAMP
     END
) - min(
     CASE
          WHEN location != 'home' THEN TIMESTAMP
     END
) )::int / 60 - 1 AS duration
 from
t;

如果您希望在最长持续时间之前的其余列,

with dur as
(
SELECT extract(epoch FROM max(
     CASE
          WHEN location = 'home' THEN TIMESTAMP
     END
) - min(
     CASE
          WHEN location != 'home' THEN TIMESTAMP
     END
) )::int / 60 - 1 AS duration
 from
t ) 
select t.*,dur.duration from t cross join dur 
  order by CASE
          WHEN location != 'home' THEN TIMESTAMP
     END desc nulls last limit 1

如果你想要每个人,你使用GROUP BY person或任何代表独特的人的id然后使用DISTINCT ON过滤掉最大的时间戳而不是ORDER BYLIMIT

Demo

© www.soinside.com 2019 - 2024. All rights reserved.