質問: [postgresql] 申請番号,承認番号,承認日のカラムのある申請テーブルがあります。 実データは 1,000001-2007,2007-01-01 2,000002-2007,2007-01-10 3,000002-2007,2007-01-15 4,000002-2007,2007-01-13 5,000003-2007,2007-01-15 とします。 このとき承認番号から年度をけしたもの(substr(承認番号,0,6)) で承認日がもっとも新しいもののみを残したリストを作成したい。 例だと申請番号1,3,5のみ抽出したい。 のですがどのようなSQLをかけばよいのでしょうか?
回答: postgresqlが手元にないので、MySQLで試しましたが、承認番号ごとの承認日の最大値をサブクエリーで絞ってそれを条件にしてはどうでしょう? もっといい方法があるかもしれませんが・・ (例) 申請テーブル →AAAテーブル 申請番号 →NO 承認番号 →SYO 承認日 →DT とした場合、 SELECT A.* FROM AAA A, ( SELECT SUBSTR(SYO,1,6) SYO, MAX(DT) DT FROM AAA GROUP BY SUBSTR(SYO,1,6) ) SUB WHERE SUBSTR(A.SYO,1,6) = SUB.SYO AND A.DT = SUB.DT; (インデントがうまくつけられません。見づらいと思いますがすみません)