显示带有MAX日期的DISTINCT记录(MySQL)

时间:2013-12-02 13:53:37

标签: mysql

我有一个简单的零售数据库,包括客户表和订单表。每个订单都有一个日期,每个订单都通过ID与客户绑定,因此客户在订单表中多次出现。

我正在尝试查询显示客户详细信息和上次购买日期,以及上次购买的日期。

我目前有:

SELECT customer.CustomerID, customer.Firstname, customer.LastName, orders.DateOrdered AS LastOrdered, DATEDIFF(CURDATE(), orders.DateOrdered) AS DaysSinseOrdered
FROM customer
JOIN orders ON customer.CustomerID = orders.CustomerID
ORDER BY DaysSinseOrdered DESC

这样可以正常工作,但是会在订单表中显示每条记录的记录,因此保管人在其中显示多个联系,而DATEDIFF来自该订单,而不是最后一个订单。这个查询当然会做什么。

然而,当我尝试做的时候:

MAX(orders.DateOrdered)

它只返回一条记录,即最新订单的记录,如果我这样做:

SELECT DISTINCT customer.CustomerID 

它不会改变,它仍会多次显示客户。

我仍然对这一切都很陌生,所以感谢任何帮助-Tom

1 个答案:

答案 0 :(得分:0)

您需要GROUP BY子句,并在每次需要最后订购日期时使用MAX

SELECT 
  c.CustomerID, 
  c.Firstname, 
  c.LastName, 
  MAX(o.DateOrdered) AS LastOrdered, 
  DATEDIFF(CURDATE(), MAX(o.DateOrdered)) AS DaysSinceOrdered
FROM customer c
JOIN orders o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.Firstname, c.LastName