- PR -

SELECT文の条件文について質問です

投稿者投稿内容
satoko
常連さん
会議室デビュー日: 2006/05/06
投稿数: 35
お住まい・勤務地: 東京
投稿日時: 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を取得です。

基本中の基本なのかもしれませんが、
どなたかご教授願います。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-05-15 11:55
結果が1件でも2件でも、MAX(CARE_SEQ) の結果はsatokoさんの望む答えに
なるように思えます・・・。

抽出結果が1件でしたら、MAX()はその1件を返しますよ。
MIZUKID
会議室デビュー日: 2007/05/11
投稿数: 6
お住まい・勤務地: VBとSQLの袋小路
投稿日時: 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 ]
satoko
常連さん
会議室デビュー日: 2006/05/06
投稿数: 35
お住まい・勤務地: 東京
投稿日時: 2007-05-15 12:18
引用:

Ahfさんの書き込み (2007-05-15 11:55) より:
結果が1件でも2件でも、MAX(CARE_SEQ) の結果はsatokoさんの望む答えに
なるように思えます・・・。

抽出結果が1件でしたら、MAX()はその1件を返しますよ。



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の条件文の書き方が分からなかったのです^^;
satoko
常連さん
会議室デビュー日: 2006/05/06
投稿数: 35
お住まい・勤務地: 東京
投稿日時: 2007-05-15 12:19
引用:

とりあえずこの辺でいかがでしょう。
//http://oracle.se-free.com/ より

http://oracle.se-free.com/dml/06_max.html

Oracleに在るかは知りませんが、キーワード検索やヘルプでSelectもしくはMAXを検索してみるのが良いと思われます。



MIZUKIDさん、返信ありがとうございます^^
このHPは便利ですね。
有効活用させていただこうとおもいます。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2007-05-15 12:42
引用:

例えばデータが、

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の条件文の書き方が分からなかったのです^^;



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を生成すればいいのです。
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-05-15 15:26
Bテーブルには他の項目(記述されていない項目)があって、
実はそれを取得したいということでしょうか?
それならば、
MAX(B.CARE_SEQ)
で取得してきた内容を
再度
Bテーブルに結合することで実現できます。
satoko
常連さん
会議室デビュー日: 2006/05/06
投稿数: 35
お住まい・勤務地: 東京
投稿日時: 2007-05-15 15:45
引用:

Bテーブルには他の項目(記述されていない項目)があって、
実はそれを取得したいということでしょうか?
それならば、
MAX(B.CARE_SEQ)
で取得してきた内容を
再度
Bテーブルに結合することで実現できます。



あすかさん、KOXさん返信ありがとうございます〜^^
言葉足りずでした、申し訳ありません。

KOXさんの言うとおり、Bテーブルの他の項目をMAX(CARE_SEQ)の条件で取得したかったです。

結合(join)について、ググって調べて見たのですが、
正直よく分からなくて。。。
申し訳ないですが、ヒントだけでも教えていただけないでしょうか。

スキルアップ/キャリアアップ(JOB@IT)