SQL文 複数条件の場合の書き方

このQ&Aのポイント
  • SQL文で複数条件の場合の書き方について教えてください。具体的には、特定条件を満たすレコードを抽出する方法が知りたいです。
  • 以下のようなデータがあり、特定の条件を持つレコードを抽出したいと考えています。
  • 抽出したいレコードは、特定の値よりも前にあるレコードです。どのようにSQL文を書けば良いでしょうか?
回答を見る
  • ベストアンサー

SQL文 複数条件の場合の書き方

初めて質問します。 下記のようなデータが存在します。 テーブルA NO DATE GYO 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 3 2010/12/02 1 <= 4 2010/12/03 1 4 2010/12/03 2 上記データにて、<=の行の値を取得し変数へ代入したとします。 変数.NO =3 変数.日付 =2010/12/02 変数.GYO =1 上記、変数を元に1件前のレコードを抽出したいのですが SQL文でのいい方法がわかりません。 取得したいレコード 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 どうかお願いいたします。

  • Oracle
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
回答No.3

こんばんは。 単純に文字列結合して、小さいものを取ればいいのでは? DATEカラムがDATE型、GYOカラムがNUMBER型と仮定します。 違ってたら、適当に型変換してください・・・。 SELECT * FROM テーブルA WHERE TO_CHAR(DATE,'YYYYMMDD')||RPAD(TO_CHAR(GYO),3,'0') < 同じように変換した、対象データ やってる事は一緒です。 ただ、SQLでやってるだけ・・・。

tm_kyokushin
質問者

お礼

遅くなり申し訳ございません。 ご回答ありがとうございました。 SQL文でカラム同士を結合できるのですね。 すみません。勉強不足でした。 大変、参考になりました。ありがとうございました。 また、今後ともよろしくお願いいたします。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

推測ですが SELECT * FROM テーブルA WHERE (NO,DATE,GYO) < ( 3,TO_DATE('2010/12/02','YYYY/MM/DD'), 1) みたいな事をやりたいということでしたら、Oracleでは文法エラーになってしまいます。 (PostgreSQLだと出来るのですが) なんで (NO<3) or ( (NO=3) and (DATE<TO_DATE('2010/12/02','YYYY/MM/DD') ) or ( (NO=3) and (DATE=TO_DATE('2010/12/02','YYYY/MM/DD') and ( GYO<1 )) と書くしかないですね。 外していたらごめんなさい。

tm_kyokushin
質問者

補足

ご回答ありがとうございました。 ただ私の質問の仕方がまずくNoは実データとしては存在せずに データの並びとしてわかりやすいように記載していました。 実データとしてはDATE、GYOのみです。 申し訳ございません。 具体的な実データの中身は テーブルA DATE(10桁) GYO(3桁) 2010/12/01 1 2010/12/01 2 2010/12/01 3 2010/12/02 1 <= 2010/12/03 1 2010/12/03 2 現在は、 select * from テーブルA where (SAGYODAY <= '2010/12/02') order by DATE DEC ,GYO DEC にて 一旦、範囲を日付だけでデータ取得し、プログラム内部で DATEとGYOを結合し(GYOは3桁0埋め変換) 2010/12/02001 <= 2010/12/01003 2010/12/01002 2010/12/01001 <=のデータより小さいデータを対象として処理を行っています。 この処理を行うのではなく、SQLだけでデータ取得できないかと思っております。 申し訳ございませんが、よろしくお願い致します。

  • kouta77
  • ベストアンサー率20% (185/896)
回答No.1

このテーブルのデータだけを考えると Where no < 変数.NO だけでないでしょうか?

tm_kyokushin
質問者

補足

ご回答ありがとうございました。 ただ私の質問の仕方がまずくNoは実データとしては存在せずに データの並びとしてわかりやすいように記載していました。 実データとしてはDATE、GYOのみです。 申し訳ございません。 具体的な実データの中身は テーブルA DATE(10桁) GYO(3桁) 2010/12/01 1 2010/12/01 2 2010/12/01 3 2010/12/02 1 <= 2010/12/03 1 2010/12/03 2 現在は、 select * from テーブルA where (SAGYODAY <= '2010/12/02') order by DATE DEC ,GYO DEC にて 一旦、範囲を日付だけでデータ取得し、プログラム内部で DATEとGYOを結合し(GYOは3桁0埋め変換) 2010/12/02001 <= 2010/12/01003 2010/12/01002 2010/12/01001 <=のデータより小さいデータを対象として処理を行っています。 この処理を行うのではなく、SQLだけでデータ取得できないかと思っております。 申し訳ございませんが、よろしくお願い致します。

関連するQ&A

  • SQL(SELECT文)を教えてください

    SQL Serverを勉強中です。 以下のようなテーブルに、同一の日付に複数の名称・値のセットが存在します。 Date(日付)  Name(名称) Value(値) 20130101      a      10 20130101      b      20 20130101      c      30 20130202      a      5 20130202      b      10 20130202      c      15 このデータを、SQLのSELECT文で取得し、以下のような表を作りたいと考えています。 a b c 20130101 10 20 30 20130202 5 10 15 行が日付、列が名称になっています。 このように取得できるSQL文を教えてください。よろしくお願いします。

  • SQL文が上手く記述できません・・。

    <<テーブル名:master>> SHOUHIN NO  KOSU ------- --- --------------- A       1   500 A       2   100 A       2   300 A       2   200 A       3   220 A       3   150 A       4   200 A       4   300 A       4   100 <<抽出結果>> SHOUHIN    NO1    NO2    NO3    NO4    GOUKEI -------    ---    ---    ---    ---    ------ A        500    600    370    600    2070 上記のmasterテーブルから、NO毎にKOSUの値を集計して 1レコードにまとめて下記の抽出結果のようにデータを抽出したいと 考えているのですが、なかなか上手くSQLを記述する事が出来ません・・・。 下記のような結果を抽出することは可能でしょうか? ご存知の方がいらっしゃれば、ご教授頂ければ幸いです。 宜しくお願い致します。

  • SQL文がわかんないっす…

    レコードを抽出するためのSQL文を教えてください。 テーブルは下記の通りです。 goodsID, stockNum, reservNum, date 1, 5, 4, 2008-11-4 2, 5, 3, 2008-11-4 2, 5, 2, 2008-11-5 :以下続く : で、2008年11月4日と、2008年11月5日の、(stockNum - reservNum) が両方とも2以上のgoodsID、つまり2を取得したいのです。 また、もし3以上と指定した場合は取得結果を空にしたいです(3つ目のレコードだけが取れると困ります)。 日付の範囲は可変です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLで、指定日条件のSQL文

    MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)商品IDで重複せずに、2)指定日に、3)一番近い過去の日、4)指定日を含めて、複数ある未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 商品でユニークになるように、 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中の、全ての未来の、レコード。 3.同一商品レコードは、複数抽出されない。

  • SQLについて

    レコード1 |レコード2 |レコード3 AAA |1111 |0000 BBB |1111 |0000 CCC |2222 |2222 CCC |3333 |2222 CCC |4444 |2222 上記のようなテーブルがあった場合、レコード1のAAAとBBBは値をそのまま抽出し レコード1のDDDはレコード2とレコード3の値が一致しているものを抽出したいのですが ひとつのSQLで実現することは可能でしょうか? レコード2とレコード3の値が一致しているものを抽出だけなら簡単にできそうなのですが AAAとBBBもというところで悩んでます。どうかご教授ください。

  • 変数を使ってのSQL文の書き方(ASP)

    プログラム未経験者です。 aspのSQL文の書き方を教えてください。 (ASP.NETではなく、ASPの方です。) FORMで受けっ取った日付データをstrdayという変数に代入し、 そのstardayを使ってのSQL文の書き方ですが、 以下のような書き方で良いのか分かりません。 例えば、 前の行の「SQL」という同じ変数の直後に連結する書き方や 文字列との連結の書き方です。 また日付をシングルクオーテーションで囲む書き方などです。 strday = Request.Form("StartDay") SQL = "SELECT ・・・,・・・," SQL = SQL & strday & "as startday_date, ・・・," SQL = SQL & " WHERE ('" & strday & "' >= CONVERT(DATETIME, '2012-07-05 00:00:00', 102)) " SQL = SQL & " AND ('" & endday & "' <= CONVERT(DATETIME, '2012-07-06 00:00:00', 102)) " すみません。 宜しくお願いします。

  • 複数条件の設定

    お世話になっております。 よろしくお願い致します。 表:TABLE SN CD NO DATE --------------------- 101 A1 1 2007/12/2 101 A2 2 2007/12/4 201 A1 1 2007/12/7 201 A2 2 2007/12/9 201 A2 3 2007/12/10 301 A1 2 2007/12/3 301 A2 3 2007/12/8 このようなテーブルがあったとして、 SNごとに、CDが'A2'のNOを取得したいです。 このとき、A2が複数行あるときはDATEの新しいほうのNOを 取得したいと思います。 SN CD NO DATE --------------------- 101 A2 2 2007/12/4 201 A2 3 2007/12/10 301 A2 3 2007/12/8 取得したい表はこのような感じです。 なのですが、どうもうまくいきません。 SELECT MAX(DATE) FROM TABLE WHERE CD='A2' GROUP BY SN これを使っていろいろやってみたのですが できませんでした。 SQLをどのように書けばいいのでしょうか? どうかよろしくお願いします。 SQL Server2005です。

  • sql文のwhere句について

    <環境>sqlserver SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には 条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか? 空白時パラメータは以下のとおり入ってきます。 @no="" …完全一致 @name="%%" …部分一致 例) SELECT * FROM テーブル WHERE (NO = @no) and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name)) NAMEは上記クエリにて取得できています。 NOのところはどのようにすればよいでしょうか?

  • 以下の場合のSQL文の書き方教えてください。

    2つのテーブルÅ、Bに同じ項目名(NYUSYA_DATE)が存在していて、 通常はAからデータを取得し、取得した値がNULLの場合は、Bから取得します。 これを1つのSQLで出来ますか? 今は、両方取得しておいて、IF文で判定しようとしています。 テーブルA SYAIN_ID (NOT NULL) NYUSYA_DATE テーブルB GROUP_ID (NOT NULL) SYAIN_ID NYUSYA_DATE

  • 複雑な抽出条件のSQL文

    まだまだ初心者ですがよろしくお願いします。 以下の条件でDBからデータを抽出したい場合のSQLを 教えていただきたいです。 ・テーブルAがありカラムがA、Bとある。 ・Aは重複できないようになっているがBは重複可。 ・Bが重複しているレコードのAの値が欲しい。 環境はSQLServer2000+VB6.0です 情報が足りないかも知れませんがよろしくお願いいたします。