こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQLについてお願いします。

下記の2つのテーブルより、各顧客が最後に売れた日を抽出したいのですがうまくいきません。

顧客テーブル
kokyaku_id
kokyaku_name

1
aaa
2
bbb
3
ccc
4
ddd

売上テーブル
uriage_date
kokyaku_id
kingaku

2000-1-1
1
100

2011-12-1
2
200

2010-2-2
2
300

2009-3-1
1
50

2006-5-29
3
300

2007
3
400

2012-9-20
3
100

kokyaku_name | uriage_date

aaa | 2009-3-1
bbb | 2011-12-1
ccc | 2012-9-20

顧客dddは売上がないので当然結果には出てこなくてOKです。

何結合でどのようなクエリにすればよろしいでしょうか。
まだDBを初めて2週間なので、ご教示お願い致します。

投稿日時 - 2012-02-15 19:10:47

QNo.7307057

すぐに回答ほしいです

質問者が選んだベストアンサー

SELECT kokyaku_name,MAX(uriage_date)
FROM 売上テーブル U
INNER JOIN 顧客テーブル K
ON U.kokyaku_id=K.kokyaku_id
GROUP BY U.kokyaku_id,kokyaku_name
ORDER BY 1
です。
(GROUP BYのU.kokyaku_idは無くても動きますが、同名を想定し通常はSELECTにも付ける方が良いです)

投稿日時 - 2012-02-15 19:50:48

お礼

ありがとうございます!シンプルでわかりやすく、実行結果も納得のいくものでした!

投稿日時 - 2012-02-15 23:35:37

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

select
k.kokyaku_name,
u.uriage_date
from 顧客テーブル k inner join
( select kokyaku_id,
max(uriage_date) uriage_date
from 売上テーブル
group by kokyaku_id) u
on k.kokyaku_id = u.kokyaku_id

投稿日時 - 2012-02-15 20:17:08

お礼

なるほど、副問い合わせでもいけるのですね!

投稿日時 - 2012-02-15 23:36:44

ANo.2

SQLは理論の組み立てが大事です。
「最後に売れた日」は「最大の日」
です。従って、次のように考えます。
1.顧客(ID)ごとに最大の日を求める。
2.上記クエリと顧客テーブルを結合し、
 名前と最大の日=最後に売れた日を
 出力する。

1.のクエリ
SELECT A.kokyaku_id,
MAX(A.uriage_date) md
FROM `売上テーブル` A
GROUP BY A.kokyaku_id

2.のクエリ
SELECT B.kokyaku_name,
A.md AS uriage_date FROM
(SELECT A.kokyaku_id,
MAX(A.uriage_date) md
FROM `売上テーブル` A
GROUP BY A.kokyaku_id) A
INNER JOIN `顧客テーブル` B
ON A.kokyaku_name=B.kokyaku_name

()の中は1のクエリそのままです。
尚、MySQLの古いバージョンでは
サブクエリが出来ませんが、5以上
であろうと推定しました。

質問時にはバージョンも記載して
ください。

投稿日時 - 2012-02-15 19:56:08

お礼

>「最後に売れた日」は「最大の日」
これが出てきませんでした。ありがとうございます!

バージョン記載漏れすいません。
お察しの通り5.1です。

投稿日時 - 2012-02-15 23:34:41

あなたにオススメの質問