最新の支払い金額と支払い回数を求める方法

このQ&Aのポイント
  • 最新の支払い金額と支払い回数を求めるためには、以下のSQLを使用します。
  • まず、最新の支払い金額を求めるためには、以下のクエリを実行します。
  • 次に、それぞれの支払い回数を求めるためには、以下のクエリを実行します。
回答を見る
  • ベストアンサー

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

以下のテーブルで、それぞれの人の最新の支払い金額とそれぞれの人の支払い回数を求めようと考えてます。 最新の支払い金額、それぞれの支払い回数、と別々には取得できるのですが、一度で取得する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

  • MySQL
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

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; でどうですか。

arappo
質問者

お礼

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

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

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

arappo
質問者

補足

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 |

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.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;

arappo
質問者

お礼

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

関連するQ&A

  • 各客の 最新の支払い金額のみリストにしたい。 Group ? Order? どうすれば?

    例えばあるテーブルに、名前と支払い金額と支払日が記録されているのとします。 Name | Kingaku | ShiharaiBi A | 300 | 2004/03/05 A | 150 | 2002/05/15 A | 270 | 2008/03/22 B | 220 | 2007/02/13 C | 440 | 2009/12/09 C | 370 | 2004/09/18 B | 110 | 2006/11/02 ここから、それぞれの人の最新の(もっとも遅い日付)の 支払い金額を求め、以下のような結果が得たい場合。。。 Name | Kingaku | ShiharaiBi A | 270 | 2008/03/22 B | 220 | 2007/02/13 C | 440 | 2009/12/09 もっとも効率のいい、シンプルなSQLは どう書けばいいのでしょうか? よろしくお願いします。

  • joinの場合のテーブル名の別名の使用方法

    select * from table1 a,table2 b where a.field1=b.field1; とできますが select * from table1 as a left join table2 as b on a.field1=b.field1; とできません。 joinの場合にテーブル名の別名を使う方法を教えてください

  • SQL文 テーブルの作成方法について

    以下のようなTABLE1からTABLE2というテーブルを作成したいと考えております。 元テーブル(TABLE1)は、IDという項目がキーとなってデータが入っており、NAME1とNAME2という項目があります。 (NAME1は必ず値が入っていますが、NAME2は値が入っていない場合もあります) 加工後のテーブル(TABLE2)で、NAME1とNAME2の値を結合した形で結果を出力したいと考えております。 (新たに作成したNAMEカラムは、必ずしもユニークになっているとは限りません。NAMEとIDを組み合わせるとユニークになります) ---------------------------------------------------- ■ TABLE1 ID NAME1 NAME1_CATE NAME2 NAME2_CATE ---------------------------------------------------- 001 鈴木 A 山田 B 002 山本 A 003 佐藤 A 高橋 B ---------------------------------------------------- ---------------------------------------------------- ■ TABLE2 ID NAME NAME_CATE ---------------------------------------------------- 001 鈴木 A 001 山田 B 002 山本 A 003 佐藤 A 003 高橋 B ・・・ ---------------------------------------------------- いろいろ試していますが、どのようなSQL文を書いたらよいのか分かりません。 現状のSQL(エラーとなります) ====================================================================================== SELECT ID, NAME, NAME_CATE FROM (SELECT ID, NAME1 as NAME, NAME1_CATE as NAME_CATE FROM TABLE1 WHERE NAME1<>NULL) JOIN (SELECT ID, NAME2 as NAME, NAME2_CATE as NAME_CATE FROM TABLE1 WHERE NAME2<>NULL) ====================================================================================== 初歩的な質問になるかと思ってしまうかと思いますが、よろしくお願いいたします。

  • SQLで・・

    すみません、教えてください。 次のようなデータがあります。 table_A Name1 Name2 ----------- 1   2 3   4 table_B ID    Name --------------- 1     あ 2     い 3     う 4     え 次のような検索結果が欲しいとします。 Name1 Name2 ------------- あ    い う    え この結果を導くSELECT文はどう書けばいいでしょうか? 今、 select B.Name as Name1, C.Name as Name2 from table_A A, table_B B, table_B C where A.Name1=B.ID AND A.Name2=C.ID とやってみましたが、検索結果は0件になってしまいます。 お知恵をお貸しください!

  • inner joinとwhereでの結合の違いは?

    お世話になります。 たとえば、テーブルが複数(この場合2つ)ある場合。 (1) test(カラム:table_id,table_name) (2) tester(カラム:table_id,table_name) 以下のクエリは条件的に select a.table_id, a.table_name from test a inner join tester b on a.table_id = b.table_id ************* select a.table_id, a.table_name from test a , tester b where a.table_id = b.table_id 同じですよね? パフォーマンス的にもjoinすることのメリットが判りません。

  • SELECTのスピード

    SELECTのスピードでどの方法が 検索スピードが速いのか教えてもらいたいのですが Aのテーブル DENNO CODE Bのテーブル CODE NAME Aのテーブルを主にAのCODEでBのテーブルを参照したい時 (1) SELECT A.DENNO,A.CODE, (SELECT B.NAME from B where A.CODE=B.CODE) AS NAME from A (2) SELECT A.DENNO,A.CODE,B.NAME FROM A LEFT JOIN B ON A.CODE=B.CODE (3) SELECT A.DENNO,A.CODE,B.NAME FROM A , B WHERE A.CODE=B.CODE(+)

  • Select文で結合した時に、重複カラムが存在するのでテーブル名を先頭

    Select文で結合した時に、重複カラムが存在するのでテーブル名を先頭か末尾に自動でカラム名に付与して表示したいのですが、いい方法はないでしょうか? (asで1個1個変えるのではなく・・・) SELECT TABLE_A.*,TABLE_B.* FROM TABLE_A LEFT JOIN TABLE_B ON TABLE_B.ID = TABLE_A.ID 表示 : TABLE_A_ID | TABLE_B_ID みたいのを考えています。

    • ベストアンサー
    • MySQL
  • distinct をexistsに変換する

    distinctをexistsに変換した方がパフォーマンスが良いようで、 例えば以下の例があるとします ---------------------------------- (前)SELECT DISTINCT a.ID1, a.NAME1 FROM TABLE1 a, TABLE2 b WHERE a.ID1 = b.ID2 (後)SELECT a.ID1, a.NAME1 FROM TABLE1 a    WHERE EXISTS ( SELECT 'X' FROM TABLE2 b WHERE a.ID1 = b.ID2) ---------------------------------- もっと複雑なSQLの場合、EXISTSに変換できるのでしょうか?。複雑なSQLとは、 「複数のテーブルからカラムを取得」「テーブル結合が2つ以上」「外部結合」 などのSQLで、以下に例を示します。 (例)SELECT DISTINCT a.ID1,a.NAME1,b.ID2,b.NAME2,c.ID3,c.NAME3    FROM TABLE1 a,TABLE2 b,TABLE3 c    WHERE a.ID1 = b.ID1(+)      AND a.ID1 = c.ID1(+)

  • sqlについて

    下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no,     isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no

  • テーブル結合で、結合フィールドをWHERE句に用いた時に、結合フィールドのデータがNULLになってしまう。

    MySQL 4.0.24-standard + PHP Version 4.3.11 を使用しています。 下記のような table_a, table_b があり、idフィールドで外部結合させています。 table_a id|value ------- 1 | 0 2 | 1 table_b id|name ------- 1 | A 2 | B SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b; result id|value|name -------------- 1 | 0 | A 2 | 1 | B しかし、下記のクエリでは、このようにidがNULLになってしまいます。 SELECT * FROM table_a NATURAL LEFT OUTER JOIN table_b WHERE table_a.id = 1; result id |value|name -------------- NULL| 0 | A 以下のような結果を得たいのですが、どうすれば良いのでしょうか? result id|value|name -------------- 1 | 0 | A

    • ベストアンサー
    • MySQL