2012-04-04 29 views
1

使用年齡我有一個表在我的PostgreSQL數據庫8.4這樣的:PostgreSQL中

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

'id'是表的主鍵嗎?你能向我們展示一些樣本數據嗎? – 2012-04-04 07:41:01

+0

我覺得你必須重新思考你的schema.Will它很簡單,如果你有事件表中的時間戳記? – sathis 2012-04-04 07:44:37

+0

用示例數據編輯文章和我當前的sql – heldt 2012-04-04 07:47:48

回答

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的第一和最後一個事件之間的間隔。