dポイントプレゼントキャンペーン実施中!

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

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文で行うのでしょうか。
サブクエリを使うのかなとは思うのですが、あまり理解できていないため思いつきません。

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

A 回答 (2件)

こんな感じでしょうか?



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
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2013/01/21 09:36

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

この回答への補足

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

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

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

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

補足日時:2013/01/19 15:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!