• ベストアンサー

PL/SQLについての質問です

ビューを作成しているのですが、1つ分らないことがあり困っています。 SYSDATEに一番近い日付のレコードを抽出したいのですがどうすればいいのか分りませんどなたか知恵を貸していただけないでしょうか。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • iwaz
  • ベストアンサー率57% (8/14)
回答No.4

こんにちは。 先の内容から作成するとこんな感じでしょうか。 (確認している間が無かったので動作するかはわかりません。 B.ID || B.来店日 項目が文字型でなければTO_CAHRで文字列 変換してやる必要があるかもしれません。) SELECT A.ID, A.CUSTNAME, A.SEX, A.PHONENO, B.来店日, B.担当, B.注文 FROM tab01 A, tab02 B WHERE A.ID = B.ID AND B.ID || B.来店日 IN (SELECT ID || Max(来店日) FROM tab02 WHERE 来店日 <= TO_DATE(SYSDATE,'YYYY/MM/DD') GROUP BY ID);

saruno
質問者

お礼

どうもありがとうございました。 望みどおりのビューを作成することができました。 感謝!感謝!です。

その他の回答 (3)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.3

Oralceはバージョンによって使用できるSQL文が 微妙に違います。 質問する際に、少なくとも  Oracleのバージョン  OS 程度は明らかにしてください。

saruno
質問者

補足

バージョンはオラクル8i 8.1.6です。 OSはwin2000です。

  • iwaz
  • ベストアンサー率57% (8/14)
回答No.2

とりあえず作ってみましたという感じです。 (実際使用するテーブル件数がやたら多い場合は やめといたほうがいいかも知れません。) 当日を含む過去日付で一番直近なものをとってきます。 DBはORACLEでサンプルでついている EMP表で 作成してみました。 参考になるでしょうか? SELECT EMPNO, ENAME,JOB, HIREDATE FROM EMP WHERE HIREDATE = (SELECT MAX(HIREDATE) FROM EMP WHERE HIREDATE IN (SELECT MAX(HIREDATE) FROM EMP WHERE HIREDATE >= TO_DATE(SYSDATE,'YYYY/MM/DD') GROUP BY HIREDATE));

saruno
質問者

補足

どうもありがとうございます。 SQLは結構複雑に組むことができるんですね。 もう少し突っ込んだ質問をしてよろしいでしょうか。 tab01 CUSTID CUSTNAME SEX  PHONENO   01   鈴木    男   0311112222  02   田村    男   0322223333 tab02 CUSTID   来店日   担当者  商品 01     2001/12/10  佐藤   ラーメン  01     2001/12/15 斎藤   カレー 02     2001/12/08 原田   唐揚げ   02     2001/12/14 峰    ハンバーグ  これらの2つのテーブルから下のようなビューを作りたいと考えています。 VIEW CUSTID CUSTNAME SEX PHONENO 来店日   担当者 01      鈴木    男   0311112222  2001/12/15     佐藤 02      田村    男   0322223333  2001/12/14    峰  tab2のなかで同一のIDを持っているレコードの中から一番SYSDATEに近いレコードを 抽出したいのです。いろいろやっているのですが、どうしてもテーブルの中で一番SYSDATEに近いレコードを持ってきてしまいます。 ひき続き格闘しておりますので、お時間がありましたらアドバイスください。お願い致します。

  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

SELECT * FROM table WHERE date-field <= SYSDATE HAVING MAX(date-field) って感じで出来ると思いますが…。 SYSDATEより新しい日付のデータが無いという前提ですが。 #未来の日付が入っているとは思えないので。

saruno
質問者

補足

ご解答ありがとうございます。 上の構文を試してみましたか、エラーになってしまいました。 せっかく教えていただいたのにこんなこといってすみません(汗)。 僕もいろいろ調べてみます。

関連するQ&A