我有一个具有以下结构的MySQL数据库:
表customers
:
表orders
:
现在我想选择所有客户以及他们的最新订单。我尝试了以下声明:
SELECT a.id, a.name, b.timestamp_unix, b.title FROM customers AS a JOIN orders AS b ON a.id = b.customerID GROUP BY a.id
除了我没有得到最新的命令(和它的标题),但是第一个已经作为第一个插入到数据库的命令时,它工作正常。
那么我如何获得最新订单(最高id
和最高timestamp_unix
)?对于时间戳,我可以使用MAX(b.timestamp_unix)
,但如何获得匹配的b.title
?
谢谢!
答案 0 :(得分:3)
你可以试试这个,我已经测试好了。
SELECT a.name as 'Customer Name', b.title as 'Order Title' FROM customers a, orders b where a.id=b.customerID AND b.timestamp_unix=(Select max(c.timestamp_unix) from orders c where c.customerID=a.id) GROUP BY a.id
答案 1 :(得分:2)
SELECT a.id, a.name, b.timestamp_unix, b.title
FROM customers AS a
JOIN ( SELECT customerID, timestamp_unix, title
FROM orders
ORDER BY timestamp_unix DESC) AS b
ON a.id = b.customerID
GROUP BY a.id
ORDER BY timestamp_unix DESC
Read this question for more information
如提及的问题所述,至少有两种方法可以解决这个问题。选择最安全,最简单的那个。
答案 2 :(得分:1)
你应该做一个subselect,做你的加入,但把分组拿走,然后把这个加入你的
Left join (select orderid from orders where customerid = A.customerid order by orderdate desc limit 1) as lastorder
我想更清楚,但我在移动电话上哈哈
现在我在我的电脑上,这里是一个MSSQL小提琴来展示它 - 只需转换为Mysql(语法应该是相同的,除了TOP 1应该是最后的LIMIT 1)