我有一个问题,我已经搜索过,但找不到可以提供任何帮助的答案。
有 3 个表:orders
、customers
和teams
。每个订单都有一个客户和一个团队。我的问题是,对于每个客户,我都试图获得他们的总订单,然后是分配给他们最后一个订单的团队。
到目前为止我的查询(工作正常):
SELECT c.id, MAX(o.timestamp) AS "Last Order", COUNT(o.id) AS "Total Orders", SUM(o.price) AS "Total Spend"
FROM orders o
LEFT JOIN customers c ON o.customer = c.id
WHERE o.timestamp > '2012-01-01 00:00:00'
GROUP BY c.id
ORDER BY c.id
我不知道如何在team.name
不影响我所拥有的其余查询的情况下加入他们下的最后一个订单。
示例表和所需结果:
顾客:
╔════╦═════════════╗
║ ID ║ NAME ║
╠════╬═════════════╣
║ 1 ║ John Smith ║
║ 2 ║ Jim Jimmers ║
╚════╩═════════════╝
团队:
╔════╦═════════════╗
║ ID ║ NAME ║
╠════╬═════════════╣
║ 1 ║ Red ║
║ 2 ║ Blue ║
╚════╩═════════════╝
订单:
╔═══════╦═════════════════════╦══════════╦══════╦═══════╗
║ ID ║ TIMESTAMP ║ CUSTOMER ║ TEAM ║ VALUE ║
╠═══════╬═════════════════════╬══════════╬══════╬═══════╣
║ 34656 ║ 2012-03-04 14:23:44 ║ 1 ║ 2 ║ 20 ║
║ 37345 ║ 2012-04-12 11:32:07 ║ 2 ║ 2 ║ 25 ║
║ 38220 ║ 2012-07-18 09:53:54 ║ 1 ║ 2 ║ 15 ║
║ 39496 ║ 2012-07-03 10:11:32 ║ 1 ║ 1 ║ 38 ║
║ 41752 ║ 2012-09-17 19:34:05 ║ 1 ║ 2 ║ 9 ║
║ 43734 ║ 2012-11-23 07:52:12 ║ 2 ║ 1 ║ 20 ║
╚═══════╩═════════════════════╩══════════╩══════╩═══════╝
如何选择如下结果:
╔════╦═════════════╦═════════════════════╦═══════════╦══════════════╦═════════════╗
║ ID ║ NAME ║ LAST_ORDER ║ TEAM_NAME ║ TOTAL_ORDERS ║ TOTAL_SPEND ║
╠════╬═════════════╬═════════════════════╬═══════════╬══════════════╬═════════════╣
║ 1 ║ John Smith ║ 2012-09-17 19:34:05 ║ Blue ║ 4 ║ 82 ║
║ 2 ║ Jim Jimmers ║ 2012-11-23 07:52:12 ║ Red ║ 2 ║ 45 ║
╚════╩═════════════╩═════════════════════╩═══════════╩══════════════╩═════════════╝