1

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 つのレコードとして通過させたいと考えています。

繰り返しますが、私はとても近くにいると感じていますが、どうすればこれをすべてまとめることができますか?

ありがとうございました?

4

3 に答える 3