2

異なるWHERE句と重複する結果を持つ2つのクエリを組み合わせたいと思います。UNIONを使用して、case_idで区別できるように結果を組み合わせるにはどうすればよいですか?

最初のクエリ

SELECT
O.case_id,
O.otc_eff_date,
DATE_FORMAT(STR_TO_DATE(O.otc_eff_date, '%Y%j'),'%m/%d/%Y') otc_ef_date,
O.otc_type,
O.case_rsf,
O.otc_rsn,
O.otc_rlse_to,
O.seg_ent_date,
O.Seg_chg_date,
O.otc_case_status,
O.otc_opn_seq_cnt,
O.filler
FROM NU.RawCaseOTC O
WHERE O.otc_eff_date BETWEEN 2011182 AND 2012182
GROUP BY O.case_id
ORDER BY otc_ef_date

2番目のクエリ

SELECT 
MAX(otc_eff_date) MAX_OTC_EFF_DATE, 
case_id,
otc_eff_date,
otc_type,
case_rsf,
otc_rsn,
otc_rlse_to,
seg_ent_date,
Seg_chg_date,
otc_case_status,
otc_opn_seq_cnt,
filler 
FROM NU.RawCaseOTC 
WHERE (otc_case_status != 'C') AND (otc_eff_date <='2011182')
GROUP BY case_id
ORDER BY otc_eff_date
4

2 に答える 2

1

この2つの選択をUNIONしてから、別の選択を行う場合、MAX、MIN、SUM、COUNT、またはAVGの各列を互いに配置すると、case_idを区別できます...

最初の行を区別したい場合は、2番目の行を集計関数にする必要があります。

于 2013-03-25T22:30:27.560 に答える
0

気をつけて!SELECTはい、2つのクエリを外側のクエリにを入れてネストしてラップするなどのことができGROUP BYます...しかし、DBは内側のクエリの出力全体を一時的に保存する必要があるため、パフォーマンスが完全に低下しますテーブルを作成し、それらを再クエリします。クエリされているレコードの数が中程度の場合でも、きれいにはなりません。

そもそも、2つのクエリを1つのクエリに結合しようとする方がはるかに良いでしょう。

このようなクエリを見ると、実行が複雑になる可能性がありますが、実行は可能であり、パフォーマンスは大幅に向上するはずです。

今のところ、あなたにぴったりの質問を思いつく時間はありませんが、この種のことを行う方法について、ここや他の場所で他にもいくつか質問があります。たぶん、これらの1つがあなたを助けますか?

于 2013-03-25T22:50:20.877 に答える