- ベストアンサー
PL/SQLについての質問です
ビューを作成しているのですが、1つ分らないことがあり困っています。 SYSDATEに一番近い日付のレコードを抽出したいのですがどうすればいいのか分りませんどなたか知恵を貸していただけないでしょうか。よろしくお願い致します。
- みんなの回答 (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);
その他の回答 (3)
- yuji
- ベストアンサー率37% (64/169)
Oralceはバージョンによって使用できるSQL文が 微妙に違います。 質問する際に、少なくとも Oracleのバージョン OS 程度は明らかにしてください。
補足
バージョンはオラクル8i 8.1.6です。 OSはwin2000です。
- iwaz
- ベストアンサー率57% (8/14)
とりあえず作ってみましたという感じです。 (実際使用するテーブル件数がやたら多い場合は やめといたほうがいいかも知れません。) 当日を含む過去日付で一番直近なものをとってきます。 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));
補足
どうもありがとうございます。 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)
SELECT * FROM table WHERE date-field <= SYSDATE HAVING MAX(date-field) って感じで出来ると思いますが…。 SYSDATEより新しい日付のデータが無いという前提ですが。 #未来の日付が入っているとは思えないので。
補足
ご解答ありがとうございます。 上の構文を試してみましたか、エラーになってしまいました。 せっかく教えていただいたのにこんなこといってすみません(汗)。 僕もいろいろ調べてみます。
お礼
どうもありがとうございました。 望みどおりのビューを作成することができました。 感謝!感謝!です。