- 締切済み
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なしで解決したいと思っております。 ご教示お願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taka451213
- ベストアンサー率47% (436/922)
WHERE句の右側に+1するのを忘れてました・・・。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 今手元に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じゃなくてカラム名になりますが・・・) 後はカウント取れば、最大出現頻度の日付(年月)が取得できます。