需要帮助,如何使用PostgreSQL计算持续时间。在下面的示例中,假设某个人的位置是在特定时间记录的。
'
我只想保留此人第一次不在家中,以及此人在外地的时间。此人从05:00到06:59 AM不在家里,这个持续时间我们要计算。
因此,结果数据集如下:
WHERE NOT EXISTS (SELECT judul FROM berita WHERE judul like %s)
答案 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 BY
和LIMIT