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

解決済みの質問

MySQLで顧客毎に最新のデータ順で表示

以下のようなデータがあります。

id 顧客コード 日付 金額
1 A001 2012/12/25 100
2 B001 2012/12/24 200
3 A001 2012/12/24 100
4 C001 2012/12/23 500
5 A001 2012/12/23 300
6 B001 2012/12/23 100

このデータを、顧客毎に最新順で表示したいのです。
順番は、
1.最新の日付順に顧客がまず並ぶ
2.その顧客の並び順で、顧客毎に日付が新しい順に各データが並ぶ
説明が下手ですが、下の様に

1 A001 2012/12/25 100
3 A001 2012/12/24 100
5 A001 2012/12/23 300
2 B001 2012/12/24 200
6 B001 2012/12/23 100
4 C001 2012/12/23 500

A001、B001、C001の中で、最新の日付を持っているのがA001→B001→C001なので、その順で並ぶ。
(SELECT 顧客コード, MAX(日付) FROM tbl GROUP BY 顧客コード かな?)
さらに、その顧客の中で日付順にデータが並ぶ。


このように抽出するには、どのようなSQL文で行うのでしょうか。
サブクエリを使うのかなとは思うのですが、あまり理解できていないため思いつきません。

わかるかたよろしくお願いします。

投稿日時 - 2013-01-19 14:08:39

QNo.7899463

すぐに回答ほしいです

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

こんな感じでしょうか?

create table hoge (id int,user varchar(20),d date,num int);
insert into hoge values
(1,'A','2012/12/25',100),
(2,'B','2012/12/24',200),
(3,'A','2012/12/24',100),
(4,'C','2012/12/23',500),
(5,'A','2012/12/23',300),
(6,'B','2012/12/23',200);

select t1.id,t1.user,t1.d,t1.num
from hoge as t1
inner join (
select user,max(d) as max_d from hoge group by user
) as t2 on t1.user =t2.user
order by max_d desc,user asc,d desc

投稿日時 - 2013-01-19 21:09:11

お礼

回答ありがとうございます。
お返事が遅くなりました。

試してみたところ、思い通りの結果を得ることができました。
ありがとうございます。
なるほど、このようにするのですね。また一つ勉強になりました。

投稿日時 - 2013-01-21 09:36:35

ANo.2

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

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

回答(2)

SELECT * FROM tbl ORDER BY 顧客コード ASC, 日付 DESC

投稿日時 - 2013-01-19 14:40:27

補足

回答ありがとうございます。

例のデータが悪かったですね。
上記のデータだとこのSQL文で同じ結果が得られてしまいます。

例えば、C001の日付が2012/12/27だとしたら、一番上にくるようにしたいのです。
各顧客コードの中で最新の日付順で顧客を並べ替えてから、その顧客の中で日付順でデータを並べたいのです。

表現が難しいですが、よろしくお願いします。

投稿日時 - 2013-01-19 15:36:06

あなたにオススメの質問