みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

最新の支払い金額と支払い回数を表示したい。

以下のテーブルで、それぞれの人の最新の支払い金額とそれぞれの人の支払い回数を求めようと考えてます。
最新の支払い金額、それぞれの支払い回数、と別々には取得できるのですが、一度で取得するSQLは、どう書けばいいのでしょうか?
よろしくお願いします。

-テーブル
name | amount | created_on
A | 340 | 2005/12/01
A | 220 | 2006/05/13
A | 820 | 2008/12/22
B | 400 | 2007/02/13
C | 290 | 2008/12/09
B | 900 | 2009/04/09

-期待する実行結果
name | created_on | times
A | 2008/12/22 | 3 |
B | 2009/04/09 | 2 |
C | 2008/12/09 | 1 |


-最新の支払い金額を求める
SELECT A.name, A.created_on
FROM table AS A
WHERE A.created_on = (
SELECT MAX( created_on )
FROM table AS B
WHERE A.name = B.name
)
ORDER BY A.id

-それぞれの支払い回数を求める。
SELECT name, COUNT(*) AS times
FROM table
GROUP BY name

投稿日時 - 2009-09-19 22:38:53

QNo.5303647

困ってます

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

select x.name,x.created_on,x.amount,
( select count(*) from tbl tbl2
where x.name = tbl2.name ) as times
from (
SELECT *
from tbl
where not exists
( select 1
from tbl tbl3
where tbl.name=tbl3.name
and tbl.created_on<tbl3.created_on )) x
order by x.name;
でどうですか。

投稿日時 - 2009-09-21 10:04:34

お礼

nora1962さん、何度もありがとうござます。
上記のクエリで期待する実行結果が得られました。

ありがとうございました。

投稿日時 - 2009-09-21 10:34:12

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

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

回答(3)

ANo.2

これでもいいかな
SELECT NAME,
MAX(CREATED_ON) CREATED_ON,
count(*) times
FROM TBL
group by name
order by name;

投稿日時 - 2009-09-21 04:52:31

補足

nora1962さん2つも回答ありがとうございます。
上記のクエリで期待する実行結果が得られました。

すみません、amoutも表示させたい場合はどうすればいいのでしょうか?
-期待する実行結果
name | created_on | amount | times
A | 2008/12/22 | 820 | 3 |
B | 2009/04/09 | 900 | 2 |
C | 2008/12/09 | 290 | 1 |

投稿日時 - 2009-09-21 07:55:35

ANo.1

SELECT NAME,
( SELECT max(created_on) FROM tbl tbl2
WHERE tbl2.NAME=tbl.NAME ) created_on,
count(*) times
FROM tbl
GROUP BY NAME
order by name;

投稿日時 - 2009-09-21 03:49:45

お礼

回答ありがとうございます。
上記のクエリで期待する実行結果が得られました。
ありがとうございました。

投稿日時 - 2009-09-21 08:01:14