私はPostgresに3つのテーブルを持っています。それらはすべて単一のイベント(「スポーツイベント」ではなく、オカレンス)に関するものです。各テーブルは、イベント中の特定のアイテムに関するものです。タイムスタンプに基づいて2つのテーブルを1つに結合するクエリ
table_header columns
gid, start_timestamp, end_timestamp, location, positions
table_item1 columns
gid, side, visibility, item1_timestamp
table_item2 columns
gid, position_id, name, item2_timestamp
私は、次のクエリを試してみた:
SELECT h.gid, h.location, h.start_timestamp, h.end_timestamp, i1.side,
i1.visibility, i2.position_id, i2.name, i2.item2_timestamp AS timestamp
FROM tablet_header AS h
LEFT OUTER JOIN table_item1 i1 on (i1.gid = h.gid)
LEFT OUTER JOIN table_item2 i2 on (i2.gid = i1.gid AND
i1.item1_timestamp = i2.item2_timestamp)
WHERE h.start_timestamp BETWEEN '2016-03-24 12:00:00'::timestamp AND now()::timestamp
問題がitem1_timestampとitem2_timestampが一致しないとき、私は列からいくつかのデータを失うことだということです。
私はtable_item1とtable_item2に持っているのであれば:タイムスタンプ(およびgid
)に純粋に基づいて、
gid | timestamp | side | name
-----------------------------
1 | 17:00:00 | left | charlie
1 | 17:00:03 | | frank
1 | 17:00:05 | right |
1 | 17:00:06 | | dee
1 | 17:00:10 | left |
:
gid | item1_timestamp | side gid | item2_timestamp | name
---------------------------- -----------------------------------
1 | 17:00:00 | left 1 | 17:00:00 | charlie
1 | 17:00:05 | right 1 | 17:00:03 | frank
1 | 17:00:10 | left 1 | 17:00:06 | dee
私は最終的な出力になりたいです。当然私はそこにヘッダー情報も持っていますが、それは簡単です。
私は別のJOINとUNIONを使用して投稿したクエリで遊んでみましたが、正しくできないようです。私が投稿したものは、私が管理できる最良の結果をもたらしますが、それは不完全です。
サイドノート:1分ごとに新しい「イベント」があります。したがって、gidは各イベントに固有のものになり、クエリでは、各データセットが同じgidのデータとペア設定されていることを確認する必要があります。これは私のi1.gid = h.gid
行の理由です。異なるイベント間のデータは比較しないでください。
ありがとうございました。これは近いですが、列が順序どおりでなく、表1のタイムスタンプと一致しない表2の列がすべて欠落しています。 – Chris
列の順序が間違っているとはどういう意味ですか? union(vs union all)は重複行を防ぎます。 –
2つのテーブルを出力と独立して比較すると、個々のデータが一列に並んでいません。私のOPで私のサンプル出力を使用するには、(左から順に)左から左に表示されます。問題の内容が完全にわからない。 – Chris