- 締切済み
COBOL プログラミング
課題で「DBからデータを取得する際、それぞれの項目から登録日が最新のデータを1件取得する」という課題をしています。 そこで以下のような処理のプログラムを書きました。 IF MECIDENPYO_NO NOT = SPACE EXEC SQL SELECT SKA_SAKI_CD --出荷先 ,SKA_TYPE --出荷タイプ INTO :A. SKA_SAKI_CD, :A. SKA_TYPE FROM テーブル名 WHERE SKA_SLIP_NO LIKE '____' || :HST-EDIT_BIKOU AND DEL_FLG = '0' AND INS_DATE =(SELECT MAX(INS_DATE) FROM テーブル名 END-EXEC END-IF 上記の処理だとテーブルの中で登録日(INS_DATE)の最大値であるデータ1件だけしか取得できません。 私が実現したい機能はたとえば Aという項目とBという項目があったとして 登録日 A 2011/9/9 A 2011/9/11 A 2011/9/10 B 2011/8/9 B 2011/8/18 B 2011/9/20 Aの中で登録日が最新(最大)である A 2011/9/11 Aの中で登録日が最新(最大)である B 2011/9/20 を取得する処理を実現したいです!! これを実現するにはORDER BY して降順に並べた後に、ROWNUMを使うらしいのですが よくわかりません。どなたかプログラムで書いていただけますかか?? ヒントや考え方でもかまいません よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- seastar3
- ベストアンサー率69% (99/142)
COBOLの文法というよりは、SQLの組込処理の記述がポイントのようですね。 GROUP BY 句を応用して、各グループの最新日付のデータを抽出するSQL文を記述する必要があります。 次のオラクルハリケンミキサーさんの実験が参考になります。 http://www.seiji-tsubosaki.net/OHM/CONTENTS/SQL_INVESTIGATION/11_item.htm