-1

私は2つのテーブルを持っています:

orders
customers

「VIPの顧客」を取得する必要があります。これは、登録してから少なくとも月に1回注文した顧客を意味します(に列があり[subscription_date]ますcustomers

私はそれを理解することはできません:(何かアイデアはありますか?

4

1 に答える 1

3

このクエリは、注文された各顧客の月数をカウントし、顧客がサブスクリプションを取得した月数と比較します。
両方で等しい価値を持つ顧客はあなたのVIP顧客です。

SELECT T1.CUSTOMERID AS VIP_CUSTOMERS 
FROM   (SELECT Count(*) AS NUM_MONTHS, 
               CUSTOMERID 
        FROM   (SELECT DISTINCT Month(ORDERDATE), 
                                Year(ORDERDATE), 
                                CUSTOMERID 
                FROM   ORDERS 
                GROUP  BY CUSTOMERID)T 
        GROUP  BY CUSTOMERID)T1 
       INNER JOIN (SELECT CUSTOMERID, 
                          Datediff(MONTHS, SUBSCRIPTION_DATE, Getdate()) AS 
                          NUM_MONTHS 
                   FROM   CUSTOMERS)T2 
               ON T1.CUSTOMERID = T2.CUSTOMERID 
                  AND T1.NUM_MONTHS = T2.NUM_MONTHS 

SQL Fiddleでサンプルデータを設定した場合は、データに応じてクエリを書き直してみます。

于 2012-10-15T13:37:49.800 に答える