null の場合は、デフォルトの end_datetime を使用して、時系列の集計として 2 つのタイム スタンプ間の期間 (秒単位) を計算できる必要があります。
ユーザー名、start_datetime、end_datetime を入力および出力するときに、パンチ カードのようなものがあると想像してください。
私が欲しいのは、その時間枠内で重複するすべてのユーザーの期間を持つ最後の N 分間の生成された時系列です。したがって、それがnullの場合、デフォルトのend_datetimeを合体させるのはSUM(end_datetime - start_datetime)になります。
したがって、私が必要だと思う基本的な部分は次のとおりです。
時間間隔を生成します。
select TIMESTAMP '2013-01-01 12:01:00' - (interval '1' minute * generate_series(0,5)) as timestamps;
COALESCE デフォルトの end_datetime
COALESCE(end_datetime, NOW())
開始日と終了日の秒差を計算する
したがって、1 人のユーザーが 11:56:50 にログインし、現在は 12:01:40 である場合、次のようなテーブルを取得する必要があります。
timestamps duration
-------------------------------------
2013-01-01 12:01:00 40
2013-01-01 12:00:00 60
2013-01-01 11:59:00 60
2013-01-01 11:58:00 60
2013-01-01 11:57:00 60
2013-01-01 11:56:00 10