在postgresql中使用age

时间:2012-04-04 07:32:04

标签: sql postgresql

我的postgresql 8.4数据库中有一个表,如下所示:

id(serial), event_type_id(id, foreign key), ts(timestamp)

我有两个事件类型ID,我需要查看之间的年龄。

Event_type_id 1 = Arrive
Event_type_id 2 = Leaves

示例数据

 id | event_type_id |             ts             
----+---------------+----------------------------
 21 |             6 | 2012-04-03 16:02:18.739274
 20 |             5 | 2012-04-03 08:44:13.244287

我希望白天将这些分组,看看它每天有多少小时。

有人能指出我如何分组和计算年龄的方向吗?

到目前为止,我有这个,但我需要生成一个系列加入或类似的东西

解决方案 不知道这是最好的做法,但它对我有用。

SELECT dx, age(max(ts), min(ts)) 
from generate_series('2012-04-01', '2012-04-14', interval '1 day') as dx 
left join events on (ts >= dx and ts < dx + '23 hours 59 minutes' and event_type_id in (5,6)) 
group by dx 
order by dx;

1 个答案:

答案 0 :(得分:0)

我认为你需要:

select age(max(ts), min(ts)), ts::date as date
from events
where event_type_id in (5,6)
group by date;

但你的问题不明确。我假设你的意思是你有一个这样的表(不是数据库):

create table events (
  id serial,
  event_type_id int references event_types,
  ts timestamp
);

您需要计算每个日期类型5或6的第一个和最后一个事件之间的间隔。