検索した問題があり、助けになる答えが見つかりません。
orders
、customers
、 の3 つのテーブルがあります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 ║
╚════╩═════════════╩═════════════════════╩═══════════╩══════════════╩═════════════╝