- - PR -
SELECT文の条件文について質問です
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-15 11:43
こんにちは^^
いつも勉強させていただいています。 今回、viewを作成する時に、SELECT文の条件文の書き方が分からなくて、書き込みさせていただきました。 環境は、Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 です。 Aのテーブルに TARGET_DT Bのテーブルに CARE_SEQ, CARE_VAL_FR_DT, CARE_VAL_TO_DT があるとします。 CARE_SEQを取得する条件で、 条件1 A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT 条件1を満たすのが二件以上あった場合、 条件2 MAX(CARE_SEQ) CARE_SEQのMAXを取得したいです。 条件1が一件だった場合は、当てはまったCARE_SEQを取得です。 基本中の基本なのかもしれませんが、 どなたかご教授願います。 | ||||
|
投稿日時: 2007-05-15 11:55
結果が1件でも2件でも、MAX(CARE_SEQ) の結果はsatokoさんの望む答えに
なるように思えます・・・。 抽出結果が1件でしたら、MAX()はその1件を返しますよ。 | ||||
|
投稿日時: 2007-05-15 11:56
とりあえずこの辺でいかがでしょう。
//http://oracle.se-free.com/ より http://oracle.se-free.com/dml/06_max.html Oracleに在るかは知りませんが、キーワード検索やヘルプでSelectもしくはMAXを検索してみるのが良いと思われます。 [ メッセージ編集済み 編集者: MIZUKID 編集日時 2007-05-15 11:56 ] | ||||
|
投稿日時: 2007-05-15 12:18
Ahfさん返信ありがとうございます^^ 例えばデータが、 A.TEST1 TARGET_DT 20051201 B.TEST2 CARE_SEQ | CARE_VAL_FR_DT | CARE_VAL_TO_DT 1 | 20050101 | 20060101 2 | 20051201 | 20070101 とあった場合、 SELECT B.CARE_SEQ FROM A.TEST1,B.TEST2 WHERE A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT で取得できるCARE_SEQは1と2になります。 その時に、MAXの2を取得したいです。 単純にWHEREの条件文の書き方が分からなかったのです^^; | ||||
|
投稿日時: 2007-05-15 12:19
MIZUKIDさん、返信ありがとうございます^^ このHPは便利ですね。 有効活用させていただこうとおもいます。 | ||||
|
投稿日時: 2007-05-15 12:42
SELECT MAX(B.CARE_SEQ) FROM A.TEST1,B.TEST2 WHERE A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT とすればいいじゃないですか。 そしてその結果を元に条件2を生成すればいいのです。 | ||||
|
投稿日時: 2007-05-15 15:26
Bテーブルには他の項目(記述されていない項目)があって、
実はそれを取得したいということでしょうか? それならば、 MAX(B.CARE_SEQ) で取得してきた内容を 再度 Bテーブルに結合することで実現できます。 | ||||
|
投稿日時: 2007-05-15 15:45
あすかさん、KOXさん返信ありがとうございます〜^^ 言葉足りずでした、申し訳ありません。 KOXさんの言うとおり、Bテーブルの他の項目をMAX(CARE_SEQ)の条件で取得したかったです。 結合(join)について、ググって調べて見たのですが、 正直よく分からなくて。。。 申し訳ないですが、ヒントだけでも教えていただけないでしょうか。 |