4

我有一个客户表和一个订单表。每个客户可以有许多订单。

我想从订单表中选择每个客户以及他们最早的订单号(重要的是我选择最早的订单号,而不仅仅是任何订单)。我想列出是否有订单的客户,如果他们有多个订单,我不想将客户包括两次。

我正在使用这个:

  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 的虚拟表(a/k/a 子查询)。

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 回答