• 締切済み
  • すぐに回答を!

COBOL 登録日が最新のデータを取得

課題で「DBからデータを取得する際、登録日が最新のデータを1件取得する」という課題をしています。 そこで以下のような処理のプログラムを書きました。 IF MECIDENPYO_NO NOT = SPACE EXEC SQL SELECT  MAX(INS_DATE),     --登録日    MAX(SKA_SAKI_CD), --出荷先    MAX(SKA_TYPE) --出荷タイプ INTO :A. INS_DATE,   :A. SKA_SAKI_CD,   :A. SKA_TYPE FROM テーブル名 END-EXEC END-IF ・質問1 まず1件情報を取得する方法にはFETCHがありますが、今回はFETCHは使わないとの指定です。 FETCH以外に同じような処理ができる方法はありますか?? ・質問2 上記の処理だとそれぞれのレコードの最大値がバラバラになって取れてしまうため正確な データを取得できません。  ヒントには副問い合わせを使うというふうにかいてあったのですが、 いまいちnetで調べてもよくわかりません 「データを取得する際最新の登録日のモノを取得する処理」をプログラムで書くとするとどのように書けばよいのでしょうか?? よろしくお願いいたします。

noname#179158
noname#179158

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数284
  • ありがとう数0

みんなの回答

  • 回答No.1

>××のものを取得する SELECT ・・・ FROM ・・・ WHERE ・・・ これが基本中の基本です。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 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を使うらしいのですが よくわかりません。どなたかプログラムで書いていただけますかか?? ヒントや考え方でもかまいません よろしくお願いいたします。

  • COBOL プログラミング

    以下の処理でエラーがでてしまっていますがどこが間違っているのかよくわかりません。 文法の間違いを指摘していただけますでしょうか?? ROWNUM と副問い合わせを使用したプログラムです。  ただし全角半角はエラーに含まないものとします。 よろしくお願いいたします。             IF MECIDENPYO_NO NOT = SPACE  THEN   EXEC SQL    SELECT  SKA_SAKI_CD --出荷先           ,SKA_TYPE --出荷タイプ    INTO :A. SKA_SAKI_CD,        :A. SKA_TYPE   FROM (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' * ORDER BY INCE_DATE DESC) WHERE ROWNUM <=1 END-EXEC END-IF.

  • COBOL  最新のデータを1件取得する方法

    プログラミングに関する質問です!  現在課題で「あるデータの登録日(INC_TIME)が最新のデータを1件取得する」という処理を考えています。 ・質問1 まず1件情報を取得する方法にはFETCHがありますが、 FETCH以外に同じような処理ができる方法はありますか?? ・質問2 登録日(INC_TIME)が最新のデータを1件取得する方法として 「最新のデータを取得する処理」をプログラムで書くとするとどのように書けばよいのでしょうか?? よろしくお願いいたします。

  • 何をつかえば・・・

    カテゴリーが異なっていたらすみませんm(_ _)m 宜しくお願い致します。 ---------------------------------- EXEC SQL BEGIN DECLARE SECTION;  VARCHAR type[3]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT data_type into :type FROM test_tbl WHERE name='test'; type.arr[type.len]='\0'; if(type.arr == '01'){ /* 処理Aへ */ }else{ /* 処理Bへ */ } --------------------------------------- 上記のようなプログラムがあります。 table_testのnameフィールドが'name'の date_typeフィールドの値を取得します。 取得したdate_typeフィールドの値が'01'なら 処理Aへ、'02'、'03'等なら処理Bを実行したいと 考えています。 ですが、上記の if(type.arr == '01'){ だとエラーが発生しています。 どのようにすればチェックすることができるでしょうか? ちなみに date_typeフィールドはかならずデータがはいっている。 nameはprimary keyの設定のため重複は存在しません。 DBはORACLE、言語はPro*Cです。 どうか宜しくお願い致します。m(_ _)m

  • 判定処理について

    カテゴリーが異なっていたらすみませんm(_ _)m 宜しくお願い致します。 ---------------------------------- EXEC SQL BEGIN DECLARE SECTION;  VARCHAR type[3]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT data_type into :type FROM test_tbl WHERE name='test'; type.arr[type.len]='\0'; if(type.arr == '01'){ /* 処理Aへ */ }else{ /* 処理Bへ */ } --------------------------------------- 上記のようなプログラムがあります。 table_testのnameフィールドが'name'の date_typeフィールドの値を取得します。 取得したdate_typeフィールドの値が'01'なら 処理Aへ、'02'、'03'等なら処理Bを実行したいと 考えています。 ですが、上記の if(type.arr == '01'){ だとエラーが発生しています。 どのようにすればチェックすることができるでしょうか? ちなみに date_typeフィールドはかならずデータがはいっている。 nameはprimary keyの設定のため重複は存在しません。 DBはORACLE、言語はPro*Cです。 どうか宜しくお願い致します。m(_ _)m

  • COBOLの動的SQLについて

    COBOLにおいて、動的にSQLを組みたいのですが、 取得する方法も含めてご教授願いませんでしょうか? 例) 条件により コード=1の場合、 SELECT A.ID,B.NAME FROM ID A,NAME B コード=2の場合、 SELECT A.ID,B.NAME,C.ADDRESS FROM ID A,NAME B,ADDRESS C のように条件により取得する項目も数もテーブルも違います。 この場合でのSQLの組み方とデータを取得する(FETCHの方法)がわかりません。 また、取得する件数も1件ではありません。 よろしくお願い致します。

  • 直近データ抽出 VS WHERE文

    お世話になっております。 PHPにてMySQLのデータを取得するスクリプトを制作しています。 (MySQL5) 日付データ(DATE型)カラムを持つテーブルがあり、現在から直近日を取得したとき、そのデータが現在より1ヵ月以内のデータであるか否かを分別したいと考えています。 そこでお聞きしたいのは、データを参照する際、MAX()にて直近日を取得し、そのデータが1ヵ月以内であるか確認するパターンと、max()を使わず、WHERE(条件)にて、1ヵ月以内に収まる日付データがあるか確認しるパターンと、どちらが処理が速く済むのでしょうか? 他の処理を行うための条件なので、これら処理によりデータを取得する必要はなく、該当する日付があるか否か、という確認だけのものです。 お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • VBAでの外部データの取得について

    ベトナムのホーチミン証券取引所のサイトから株価データを取得したいと思っております。 http://www.hsx.vn/hsx_en/Modules/Danhsach/SymbolDetail.aspx?type=S&MCty=HSI このページの「Date & news」とうタブにある株価の時系列データをVBAにて取得したいのですが、 長期間のデータの所得方法が分かりません。 このページに表示される1ヶ月間のデータならば取得できるのですが、 長期データを取得するにはどのようにすればいいのでしょうか。 宜しくお願いいたします。

  • Fetchについて悩んでいます

    素人な質問だとは思いますが困っています。 よろしくお願いします。 処理としてはサーバー側(Java)で帳票のためのデータをオラクルから取得するのですが、 件数が膨大な為、PL/SQLのFETCHで1件ずつ取得しサーバー側で中止要求命令が出ればFETCHを途中で終了し、それまで取得したデータをクライアントへ返却するというものです。 この実現に悩んでいます。 サーバー側でストアドをコールして1件取得し、その後再びストアドをコールし2件目を取得するということは可能なのでしょうか? Fetchにこだわっているわけではありません。 何か他に方法がありましたらご教授ください。 足りない表現などは補足させていただきますので、ぜひよろしくお願いします。

  • 日付が上手く取得できないです

    $row['date'] で吐き出してます。 この吐き出したデータの最大値を取得したいです。 5/5 5/10 5/20 なら5/20を取りたいわけです。 しかし、この日付。max()で正常な最大値が取得できないです。SQLのORDER BYなら日付でも判別しますが なにか方法はないですか?? あくまでも一度全部の日付をだしたいので、SQLで最大値をとるのでは、ちょっと違ってしまうです。

    • ベストアンサー
    • PHP