2012-02-04 22 views
0

私は別のmysqlクエリの質問に戻ります。今回は、時間範囲を指定して、顧客の最後の注文日と、その時間範囲内に顧客が置いた注文の総数を選択する必要があります。SELECT、COUNT、GROUP BY、ORDER BYで

(剥奪)クエリはこのように書き:

SELECT 
    customers_id, 
    customers_name, 
    date_purchased, 
    count(*) as total_order 
FROM orders 
GROUP BY customers_id; 

明らかdate_purchasedがある時間範囲内で、顧客の最後の順序ではありませんが、私がして、グループの前に注文することはできません返さとにかくこれを回避するには?例えば、私は最初に注文する必要がありますし、次にグループ化します(入れ子にされた選択肢)?

答えて

3
select customers_id, 
     customers_name, 
     MAX(date_purchased) as last_purchase, 
     count(*) as total_order 
from orders 
group by customers_id,customers_name; 
+0

GROUPフィールドに 'customers_name'を追加する際のポイントは何ですか? IDは明らかによりユニークです。 – Slava

+1

MySQLのバックグラウンドではなくSQL Serverから来ている可能性があります - 集計されていない場合、MSSQLはすべてのフィールドをGROUP BYで指定する必要があります。 –

+0

私は参照してください。申し訳ありません。はい、MySQLはGROUP BYの集約されていないフィールドをすべて必要とせず、最後に表示された値だけを入れます。 – Slava

2

MAX(date_purchased)それはDATE/DATETIME/TIMESTAMP列の場合。文字列の場合は、MAX(STR_TO_DATE(date_purchased, '%m-%d-%Y'))などの形式に変換する必要があります。

日付範囲について... WHERE date_purchased BETWEEN '2012-01-01' AND '2012-02-04'または範囲が何であれ追加してください。開始日/終了日がこの形式でない場合は、STR_TO_DATEも使用する必要があります。

0
select customers_id, 
     customers_name, 
     MAX(date_purchased) as most_current_purchase_within_range, 
     count(*) as total_amount_of_orders 
from orders 
where (date_purchased between ('2011-01-01') and ('2011-12-31')) 
group by customers_id