4

顧客テーブルと注文テーブルがあります。各顧客は多くの注文をすることができます。

注文テーブルからすべての顧客とその最初の注文番号を選択したいと思います(注文だけでなく、最も早い注文番号を選択することが重要です)。注文の有無にかかわらず顧客をリストしたいのですが、複数の注文がある場合は2回顧客を含めたくありません。

私はこれを使用しています:

  SELECT *
    FROM customers
    LEFT JOIN orders
    ON customers.id = orders.customer_id 
    GROUP BY customers.id

これにより、テーブルから好きな注文IDを選択することを除いて、ほぼ私が望むものが得られます。並べ替えて、最小の注文IDを選択できるようにする必要があります。

何かアイデアはありますか?

私の顔をじっと見つめているものだと確信しています...

編集:要求に応じてテーブルの構造

  • 顧客:


    | ID | Name | Address            | Etc |
    ----------------------------------------
    | 1  | Joe  | 123 Fake Street    |     |
    | 2  | Mike | 1600 Fake Road     |     |
    | 3  | Bill | Red Square, Moscow |     |
    ----------------------------------------
    
  • 注文:


    | ID | Customer_ID | Date |
    ---------------------------
    | 1  | 1           |  ... |
    | 2  | 2           |  ... |
    | 3  | 2           |  ... |
    | 4  | 1           |  ... |
    ---------------------------
    
4

2 に答える 2

7

各顧客の最小の注文 ID を持つ仮想テーブル (別名サブクエリ) を作成します。

SELECT customer_id, min(order_id)
  FROM orders
 GROUP BY customer_id

次に、そのテーブルを顧客テーブルと結合します。

SELECT C.customer_id, firstorder.order_id
  FROM CUSTOMERS as C
  LEFT JOIN (
    SELECT customer_id, min(order_id)
      FROM orders
     GROUP BY customer_id
  ) AS firstorder ON c.customer_id = firstorder.customer_id
于 2012-06-13T12:23:53.887 に答える
1

これを試して

Select customer.*,Order.OrderNo As EarilerORderNo
From Customers Left Join 
(Select customer_id,orderid from orders order by customer_id,orderid desc) As Orders 
ON Customers.Id=Orders.OrderID
于 2012-06-13T12:22:45.807 に答える