みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

オラクルSQLについて

初心者です。困っています。

テーブルC
日付_番号_ステータス
1/3____1_____Q
1/5____2_____R
1/6____5_____G
1/7____7_____P
1/20__ 9_____R
2/1___10_____R

このようなテーブルを、1.日付順、2.番号順の優先順位で、選択していく為、下記のようなSQLを作成しました。

SELECT 番号 FROM テーブルC WHERE (TO_CHAR([日付],'yyyyMMdd') || [番号])
IN (select MIN((TO_CHAR([日付],'yyyyMMdd') || [番号])) FROM テーブルC
WHERE (TO_CHAR([日付],'yyyyMMdd') || [番号])
> (SELECT (TO_CHAR([日付],'yyyyMMdd') || [番号]) FROM テーブルC WHERE [番号]=前回編集した番号))

ユニークなのは番号だけです。

これに、ステータス が RかPの場合 を加えたいだけなのですが、SQLが多くなりすぎて、困難になってしまいました・・・。

どなたかご教授頂ければ幸いです。

投稿日時 - 2008-07-25 19:49:24

QNo.4203728

すぐに回答ほしいです

質問者が選んだベストアンサー

ANo.1です。

> とりあえず上記は、厳密に言うと
>     WHERE [番号]=前回編集した番号)
> でしょうか?
すみません。そうなります。
手元にOracleの実環境がないので机上のクエリになります。
Order By 句ももしかしたら()が不要かな?

それと、
ROWNUM = 1 は、ROWNUM <= 1 が正しかったかもしれません。

ちなみに私の例は、見栄えの関係で全角スペースを入れてありますので、コピーしたままでは動かないと思います。


余談ですが、
「ROWNUM」はクエリの結果に対する内部的なシーケンシャルナンバーです。最終結果に対して振られる番号の為、私の知っている限り「ROWNUM > 5」等では機能しないです。この判定によって最終結果が再び変わるので機能しないのかな?と理解していますが。

投稿日時 - 2008-07-29 20:02:21

お礼

ありがとうございました! 参考にしてできました。

投稿日時 - 2008-08-01 15:34:43

このQ&Aは役に立ちましたか?

21人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

RかPの場合っていうのは、
Rの場合のみとか、Pの場合のみとかってことかなぁ?

SELECT *
FROM テーブルC
WHERE ROWNUM = 1
 AND [ステータス] = 'R'
 AND (TO_CHAR([日付],'yyyyMMdd') || [番号])
  > (SELECT (TO_CHAR([日付],'yyyyMMdd') || [番号])
    FROM テーブルC
    WHERE [番号]=前回編集した番号))
ORDER BY (TO_CHAR([日付],'yyyyMMdd') || [番号])

だとシンプルかな。

投稿日時 - 2008-07-25 20:01:59

お礼

Rの場合のみとか、Pの場合のみとかのことです。

ありがとうございます!
シンプルになると嬉しいです。
上記試してみましたが、なかなか動きません・・・。

    WHERE [番号]=前回編集した番号))
とりあえず上記は、厳密に言うと
    WHERE [番号]=前回編集した番号)
でしょうか?

投稿日時 - 2008-07-29 18:20:54

あなたにオススメの質問