如何使用Postgresql获取持续时间

时间:2019-02-20 08:20:49

标签: postgresql duration

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

'

我只想保留此人第一次不在家中,以及此人在外地的时间。此人从05:00到06:59 AM不在家里,这个持续时间我们要计算。

因此,结果数据集如下:

WHERE NOT EXISTS (SELECT judul FROM berita WHERE judul like %s)

1 个答案:

答案 0 :(得分: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

相关问题