私は Postgres 9.1 を使用しており、データが存在しない場合でも複製したい 2 つの列を返すクエリがあります。私のクエリの重要な部分は
SELECT DATE_TRUNC('week', tx_dttm) AS interval_time, institution_id FROM (...)
WHERE institution_id IN (1, 3, 4, 5, 7, 9) GROUP BY interval_time, institution_id
これにより、期待どおりにすべての機関とすべての interval_times が返されます。ここで、データのない行も必要です。次のようにして、一度にいずれかを取得できます
SELECT DATE_TRUNC('week', tx_dttm) AS interval_time, institution_id FROM (...)
WHERE institution_id IN (1, 3, 4, 5, 7, 9) GROUP BY interval_time, institution_id
RIGHT JOIN generate_series('2012-02-03', '2013-02-18', interval '1 week')
ON DATE_TRUNC('week', generate_series) = interval_time
また
SELECT DATE_TRUNC('week', tx_dttm) AS interval_time, institution_id FROM (...)
WHERE institution_id IN (1, 3, 4, 5, 7, 9) GROUP BY interval_time, institution_id
RIGHT JOIN unnest(array[1, 3, 4, 5, 7, 9]) AS all_institution_id
ON all_institution_id = institution_id
ただし、それらを組み合わせて、すべての機関のすべての interval_time を取得したいと考えています。interval_timeごとに繰り返される各institution_idを含むある種の中間テーブルを作成し、それをRIGHT JOINするのが最善のようですが、その方法がわかりません。どんな助けでも大歓迎です。
編集
少し遊んだ後、やりたいことは次のようですが、構文が間違っています
SELECT DATE_TRUNC('week', tx_dttm) AS interval_time, institution_id FROM (...)
WHERE institution_id IN (1, 3, 4, 5, 7, 9) GROUP BY interval_time, institution_id
RIGHT JOIN unnest(array[1, 3, 4, 5, 7, 9]) AS all_institution_id,
generate_series('2012-02-03', '2013-02-18', interval '1 week')
ON DATE_TRUNC('week', generate_series) = dose_hsts.interval_time
AND all_institution_id = institution_id