0

これまでのところ、いくつかの列を持つ結果セット (一時テーブル内) を含むクエリがありますが、関心があるのは 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 を使用するかもしれないと考えています。しかし、それは同じ日付を返す必要がありますか?

私は正しい軌道に乗っていますか、それとも何か不足していますか? 提案?より詳しい情報??

4

1 に答える 1