2012-04-04 15 views
1

で年齢を使用する:私は間の年齢を確認する必要がある2つのイベントタイプのIDを持っている私はこのように私のPostgreSQL 8.4データベース内のテーブル持っているのpostgresql

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

を。

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'はテーブルの主キーですか?サンプルデータを表示できますか? –

+0

私はあなたのスキーマを再考する必要があると感じています。イベントテーブルにタイムスタンプがあれば簡単ですか? – sathis

+0

サンプルデータと私の現在のSQLを持つ投稿を編集してください – heldt

答えて

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の最初と最後のイベントの間隔を計算する必要があります。

関連する問題