2 つの結果セットを結合する必要があり、非常に近いと感じていますが、これをすべてまとめる方法がわかりません。
これは、結果セットが小さいクエリの 1 つです (非アクティブを教えてください)。
SELECT MAX(set_date) AS most_recent_inactive, key_value, statusid
FROM status_history
WHERE base_table = 'userinfo'
AND statusid = 10 AND set_date > TO_DATE('2012-10-01', 'YYYY-MM-DD')
GROUP BY key_value, statusid
出力:
recent_inactive key_value statusid
2013-01-30 15 10
2013-06-04 261 10
2013-06-18 352 10
2012-10-04 383 10
2013-01-22 488 10
2013-03-04 711 10
2013-06-19 749 10
2013-03-05 806 10
小さな結果セットを持つ別のクエリ (アクティブを教えてください)
SELECT MAX (set_date) AS most_recent_active, key_value, statusid
FROM status_history
WHERE base_table = 'userinfo'
AND statusid =11
GROUP BY key_value, statusid
出力:
recent_active key_value statusid
2002-01-01 3 11
2002-01-01 5 11
2002-01-01 14 11
2002-01-01 15 11
2002-01-01 21 11
2002-01-01 23 11
2002-01-01 25 11
2002-01-01 26 11
アクティブと非アクティブをすべてまとめたいので、それらをすべて結合します
SELECT NULL AS most_recent_active, MAX(set_date) AS most_recent_inactive, key_value, statusid
FROM status_history
WHERE base_table = 'userinfo'
AND statusid = 10 AND set_date > TO_DATE('2012-10-01', 'YYYY-MM-DD')
GROUP BY key_value, statusid
UNION all
SELECT MAX(set_date) AS most_recent_active, NULL AS most_recent_inactive, key_value, statusid
FROM status_history
WHERE base_table = 'userinfo'
AND statusid = 11
GROUP BY key_value, statusid
ORDER by key_value
出力:
recent_active recent_inactive key_value statusid
2002-01-01 null 3 11
2002-01-01 null 5 11
2002-01-01 null 14 11
null 2013-01-30 15 10
2002-01-01 null 15 11
2002-01-01 null 21 11
2002-01-01 null 23 11
2002-01-01 null 25 11
2002-01-01 null 26 11
2002-01-01 null 27 11
2002-01-01 null 29 1
問題は、key_value 15 が重複していることです。
値は正しいですが、そのレコードと後続のすべての重複を「平坦化」し、行 15 と他のすべての一致を、両方の日付フィールドが設定された 1 つのレコードとして通過させたいと考えています。
繰り返しますが、私はとても近くにいると感じていますが、どうすればこれをすべてまとめることができますか?
ありがとうございました?