初歩的な質問ですが、よろしくお願いいたします。

初歩的な質問ですが、よろしくお願いいたします。 object browserでsysdate(2020/9/1とします)時点での、 品目別客先別で最新有効開始日の単価一覧をVIEW(SQL)で作成したいです。 DBはoracle12になります。 単価テーブル 品目 客先 有効開始日 単価 -------------------------------------------- りんご A 2019/10/01 100 りんご A 2020/04/01 120 りんご B 2020/10/01 150 バナナ B 2019/04/01 60 バナナ B 2019/10/01 50 バナナ C 2019/10/01 80 ぶどう A 2020/04/01 150 ぶどう B 2020/04/01 150 ぶどう C 2019/10/01 100 ぶどう C 2020/04/01 120 ぶどう C 2020/10/01 130 以下の結果となるようなVIEWのコードを教えてもらえないでしょうか。 品目 客先 有効開始日 単価 -------------------------------------------- りんご A 2020/04/01 120 バナナ B 2019/10/01 50 バナナ C 2019/10/01 80 ぶどう A 2020/04/01 150 ぶどう B 2020/04/01 150 ぶどう C 2020/04/01 120 どうぞよろしくお願いいたします。

Oracle | SQL Server17閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

view を定義するSQLスクリプトを示せばよいのでしょうか。 品目と客先とでグループ化した中で、有効開始日がsysdate を超えない範囲で最新となるレコード のみを表示すればよいということですね。 VIEW名は、たとえば NEW単価 とします。 create or replace view NEW単価 as select 品目, 客先, 有効開始日, 単価 from ( select 品目 , 客先 , 有効開始日 , 単価 , ROW_NUMBER() OVER(PARTITION BY 品目,客先 ORDER BY 有効開始日 DESC) RNUM from 単価テーブル where 有効開始日 ≦ sysdate ) where RNUM=1 でVIEW作成できるはずです。 定義したView を表示させるには、たとえば select * from NEW単価 order by 品目,客先 などと実行すればいいです。 ただし、品目が表示される順は、りんご、バナナ、ぶどうの順にはならないです。

ThanksImg質問者からのお礼コメント

希望のともしび様 回答ありがとうございます。 教えて頂いたコードをベースに作成できました。 本当に助かりました、ありがとうございます。 差し出がましいようですが、 2点問題がありましたので報告させて頂きます。 ① ≦ ではエラーでしたので、<=に変更しました。 ② from テーブル名 の後の別名がなかったため、足させて頂きました。 また何かありましたら、お知恵貸して頂きますようお願いします。

お礼日時:9/14 8:48