我有一个简单的零售数据库,包括客户表和订单表。每个订单都有一个日期,每个订单都通过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
答案 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