• 締切済み

SQL、特にOralce 8iに関して、データの集計に関する質問です。

SQL、特にOralce 8iに関して、データの集計に関する質問です。 以下のようなデータがあったとします。 [開始年月(int)]  [終了年月(int)]  [値] 201001      201004      1 201003      201007      2 201005      201010      3 201007      201101      4 このとき以下のような感じで、重複している月で値を合算し、一番値が大きな月を求めるには、どうすればよいでしょうか。 1 2 3 4 5 6 7 8 9 101112 (月) ■■■■________ __■■■■■_____ ____■■■■■■__ ______■■■■■■ ↓↓↓↓↓↓↓↓↓↓↓↓ 1 1 3 3 5 5 9 7 7 7 4 4 (計) ←この場合 7月が一番大きかった できればPL/SQLなしで解決したいと思っております。 ご教示お願いいたします。

みんなの回答

回答No.2

WHERE句の右側に+1するのを忘れてました・・・。

回答No.1

こんにちは。 今手元にOracleがないので検証ができません。 日付変換など、細かいところは調整してください・・・。 ※このままだと確実にエラーです。 SELECT 値, ADD_MONTHS(TO_DATE(開始年月), COUNTER-1) AS 日付 FROM (SELECT 値, 開始年月, 終了年月 FROM テーブル) A, (SELECT ROWNUM AS COUNTER FROM ALL_CATALOG) B WHERE B.COUNTER <= 終了年月-開始年月 ORDER BY 値, 日付; ここまででFROM、TOしかなかった日付範囲を分解しています。 途中、インラインビューでALL_CATALOGを使用していますが、連番さえ取れれば問題ないので、例えば、1~1000ぐらいまで連番を持っているテーブルでも構いません。 (その場合はROWNUMじゃなくてカラム名になりますが・・・) 後はカウント取れば、最大出現頻度の日付(年月)が取得できます。

関連するQ&A