プロが教えるわが家の防犯対策術!

はじめまして、よろしくお願いします。

テーブルA、B、Cから情報を取得し、下記のSELECTイメージを表示させたいのですが、
どのようなSQLを記述すれば良いのかわからず、困っております。
どなたかご教示頂けますでしょうか。

SELECTイメージ
 日付      キー
 ------------ -------------
 9/1      AAAAA
 9/1      CCCCC
 9/2      AAAAA
 9/2      CCCCC
 9/3      AAAAA
 9/3      BBBBB
 9/3      CCCCC
 9/4      AAAAA
 9/4      BBBBB
 9/4      CCCCC


テーブルA
 日付      キー
 ------------- -------------
 8/31      AAAAA
 8/31      CCCCC

テーブルB
 日付      キー
 ------------ -------------
 9/1      AAAAA
 9/3      BBBBB
 9/4      CCCCC

テーブルC
 日付
 -------------
  ・
  ・
  ・
  8/31
  9/1
  9/2
  9/3
  9/4
  9/5
  9/6
  ・
  ・
  ・

A 回答 (3件)

検証してないんですが・・DISTINCTを使えば簡単なんじゃないですかね?



select distinct C.日付,X.キー
from
(
select 日付,キー from B
union
select 日付+1,キー from A
) X,C
where C.日付>=X.日付 and C.日付<=trunc(sysdate,'DD')
;
    • good
    • 0

今回のご説明はよくわかりました(と思います)。


日付(DT)はDATE型、取込日はSYSDATEで書きましたが、考え方ご理解しやすい書き方のはずです。
1)「テーブルAにある最大の日付の翌日」と、「テーブルBにある最小の日付」のうち、小さい方がデータを作らないといけない開始日になります。取込日が終了日です(もちろんキー単位)。
2)それを割り出したら、テーブルCとBETWEENを使って結合します。

SELECT
c.DT,
d.KEY
FROM tblc c
INNER JOIN
(SELECT KEY,MIN(DT) DTF,TRUNC(SYSDATE) DTT
FROM
(SELECT KEY,MAX(DT)+1 DT FROM tbla GROUP BY KEY
UNION ALL
SELECT KEY,MIN(DT) DT FROM tblb GROUP BY KEY)
GROUP BY KEY) d ON c.DT BETWEEN d.DTF AND d.DTT
ORDER BY c.DT,d.KEY
    • good
    • 0

普通ならば一発で回答がつくような内容ですが、こういう場合はテーブルA、Bの日付は何を示すかは最低書いていただきたいです。


例が間違っていない限り、テーブルA/Bは開始日・終了日テーブルではないようです。
それを回答者に推測させる時点であまり親切な質問の仕方ではないですし、定義確認に最低1往復掛かって回答がすぐに得られないし、
回答も的外れになる可能性が高く、お互いメリットがありませんよね。

この回答への補足

言葉足らずな質問となってしまい、大変申し訳ありません。

テーブルAは蓄積用テーブルとして扱っており、データはテーブルBからテーブルAへINSERTされ、
日付はテーブルBから、テーブルAにINSERTされた日を表しています。
テーブルBは一定期間データを貯めて、あるタイミングでテーブルAへデータをINSERTします。
テーブルBの日付は、純粋にテーブルBへINSERTされた日付です。
テーブルCは日付マスタで、日付を連番で格納しています。
尚、テーブルBからテーブルAへデータをINSERTする際には、キー毎の日付をINSERTする日まで連番で持たせる必要があります。

#例として挙げさせて頂いたSELECTのイメージで、やりたい事をパターン別にわけるとすると、以下の3パターンとなります。
 ※テーブルBからテーブルAへのデータ投入は9/4と仮定しています。
  1.キー'AAAAA'のパターン:テーブルAにキーが存在し、テーブルAとテーブルBの日付が連番となっているので、
                キーはそのままで、9/4までの連番データを作成したい。
  2.キー'BBBBB'のパターン:テーブルAにキーが存在しないので、テーブルBの日付を開始日として、
                9/4までの日付連番データを作成したい。
  3.キー'CCCCC'のパターン:テーブルAにキーは存在するが、テーブルAとテーブルBのキー毎の日付が連番となっていないので、
                9/1~9/4までの日付連番データを作成したい。


つたない説明となってしまいましたが、どうぞ宜しくお願い致します。

補足日時:2008/11/20 15:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す