はじめまして、よろしくお願いします。
テーブル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件)
- 最新から表示
- 回答順に表示
No.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')
;
No.2
- 回答日時:
今回のご説明はよくわかりました(と思います)。
日付(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
No.1
- 回答日時:
普通ならば一発で回答がつくような内容ですが、こういう場合はテーブル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までの日付連番データを作成したい。
つたない説明となってしまいましたが、どうぞ宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel2010 グラフ 横軸目盛線の間隔変更 1 2023/05/09 11:47
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
指定した年月までのデータを取...
-
エクセルのヘッダーを変数で指...
-
PLSQL CHARの項目を使用した計算
-
日付書式に変換でこまっています!
-
LogParserを使用した前日分のイ...
-
oracle 文字列 01:45 を時間に...
-
Excelグラフの日付軸の日付がず...
-
日付の切り出し方法について
-
特定の日付が第何週目にあるか...
-
23時59分59秒までのデータを抽...
-
OSのシステム日付を変更して...
-
【VBA】「時間+日付.xls」ファ...
-
SQLite3のtext→date変換について
-
○ヶ月後の日付の自動算出方法
-
oracle 最新日付との比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの数値から時間に変換す...
-
今日の日付が入った行のデータ...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
ExcelのSUMPRODUCTで日付の範囲...
-
テーブルの主キーをdate型...
-
Excelグラフの日付軸の日付がず...
-
oracle 文字列 01:45 を時間に...
-
23時59分59秒までのデータを抽...
-
SQL スクリプトのご相談
-
WHERE句にて「30日前から今日ま...
-
指定した年月までのデータを取...
-
DB2のSQL(日付)について
-
yyyy/M/dをyyyy/MM/ddに変換
-
重複するIDのデータを1行にま...
-
日付型なら変数の先頭になん...
-
日付書式に変換でこまっています!
-
Excelの並び替え(先頭の文字以...
おすすめ情報