1

postgresql8.4データベースに次のようなテーブルがあります。

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

2つのイベントタイプ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

これらを日ごとにグループ化して、1日あたりの時間数を確認したいと思います。

誰かが年齢をグループ化して計算する方法を教えてもらえますか?

これまでのところこれはありますが、参加するシリーズなどを生成する必要があります

解決策 それがベストプラクティスかどうかはわかりませんが、私にとってはうまくいきます。

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;
4

1 に答える 1

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

于 2012-04-04T08:44:56.643 に答える