これまでのところ、いくつかの列を持つ結果セット (一時テーブル内) を含むクエリがありますが、関心があるのは 4 つだけです。1 つは顧客 ID (varchar)、1 つは日付 (smalldatetime)、1 つは金額 (money)、最後はタイプ (char) です。同じ顧客 ID を持つ複数の行があり、日付、金額、およびタイプに基づいて評価したいと考えています。例えば:
Customer ID Date Amount Type
A 1-1-10 200 blue
A 1-1-10 400 green
A 1-2-10 400 green
B 1-11-10 100 blue
B 1-11-10 100 red
AI のすべてのオカレンスについて、それらを比較して 1 つだけを識別したいと考えています。最初は最も古い日付で、次に最大量で、それでもタイプを比較して同点の場合です。次に、顧客ごとに 1 行を返します。
クエリの一部を提供しますが、正しい結果を得るために 2 日間費やした後、今は家にいます。次のようになります。
(query to populate #tempTable)
GROUP BY customer_id
HAVING date_cd =
(SELECT MIN(date_cd)
FROM order_table ot
WHERE ot.customerID = #tempTable.customerID
)
OR date_cd IS NULL
HAVING の結果は、customer_id ごとに 1 行だけになると思います。そこにはいくつかのつながりがあったので、これは事実ではありませんでした。
ORを実行できるかどうかはわかりません-ここにはNULL値を持つものがあります-とにかくすべて同じである場合、次の比較へのステップを説明しませんでした。ある種のIFまたはWHEREループを使用して一時テーブルの行処理を回避する方法がわかりません。
私が書いているように、元のテーブルを見る代わりに、HAVING 句で #tempTable.date_cd を使用するかもしれないと考えています。しかし、それは同じ日付を返す必要がありますか?
私は正しい軌道に乗っていますか、それとも何か不足していますか? 提案?より詳しい情報??