SQLテーブルの情報から特定条件でデータを取得する方法

このQ&Aのポイント
  • SQLテーブルの情報から、特定の条件でデータを取得する方法を解説します。
  • 指定した条件に基づいて、テーブルからデータを取得するSQL文の作成方法について説明します。
  • 特定の条件を満たすデータを取得するためのSQL文を作成しています。
回答を見る
  • ベストアンサー

SQL

テーブル情報 id start_dt end_dt --+----------+---------- 1 2014-01-07 2014-01-20 2 2014-01-08 Null 3 2014-01-09 Null 4 2014-01-10 Null 5 2014-01-11 Null を以下のSQL文の場合 select * from infomation where start_dt <= '2014/01/10' and (end_dt >= '2014/01/10' or end_dt is null) order by start_dt desc limit 3 id start_dt end_dt --+----------+---------- 4 2014-01-10 Null 3 2014-01-09 Null 2 2014-01-08 Null が取得されます。 id start_dt end_dt --+----------+---------- 4 2014-01-10 Null 3 2014-01-09 Null 1 2014-01-07 2014-01-20 の結果のように取得するSQL文をつくることは可能でしょうか? 何がしたいかというと ・start_dtが新しい順に並べる。 ・3件のレコードを取得する。 ・start_dtが'2014/01/10'より古いレコードを取得する。 ・end_dtが'2014/01/10'より新しいレコードがある場合は、Nullのレコードより優先する。 どうかお助けください。

noname#213288
noname#213288
  • MySQL
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.1

select * from (select * from infomation where start_dt <= '2014/01/10' and (end_dt >= '2014/01/10' or end_dt is null) order by end_dt desc, start_dt desc limit 3) as a order by a.start_dt desc;

noname#213288
質問者

お礼

回答いただきありがとうございます。 パーフェクトでございます。 大変助かりました。勉強になりました。

関連するQ&A

  • SQL

    テーブル情報 id start_dt end_dt --+----------+---------- 1 2014-01-07 2014-01-20 2 2014-01-08 Null 3 2014-01-09 Null 4 2014-01-10 Null 5 2014-01-11 Null を以下のSQL文の場合 select * from infomation where start_dt <= '2014/01/10' order by start_dt desc limit 3 id start_dt end_dt --+----------+---------- 4 2014-01-10 Null 3 2014-01-09 Null 2 2014-01-08 Null が取得されます。 id start_dt end_dt --+----------+---------- 4 2014-01-10 Null 3 2014-01-09 Null 1 2014-01-07 2014-01-20 の結果のように「id:2」よりも「end_dt」を優先して取得するSQL文をつくることは可能でしょうか? 何がしたいかというと ・start_dtが'2014/01/10'より新しい順に3件取得したい。 ・end_dtが'2014/01/10'より未来で該当する場合にNullのレコードより優先したい。 どうかお助けください。

    • ベストアンサー
    • MySQL
  • MySQLで、NULLか空の判定について

    下記のSQL文は、間違っていると思われます。 MySQLをJAVAでコーディングしています。 やりたいことは、 1)food_textが、NULLか、空っぽの時に、 2)limit_dateが最大の 3)レコード1件を抽出したいのです。 SELECT Id, food_id FROM foods   WHERE    (kind_id = 1)  AND (food_text IS NULL) AND (DATALENGTH(food_text) <= 0)  AND (delete_flag = false)  ORDER BY limit_date DESC  LIMIT 1;

    • ベストアンサー
    • MySQL
  • SQLエラー

    検索システムの検索結果の分割をしようとしています。 しかしどうしてもSQL文にエラーがでてしまいます。 SELECT * FROM shops where (area='◯◯◯') ORDER BY id DESC limit0, 10 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit0, 10' at line 1 該当するSQL文は以下になります。 $query = "SELECT * FROM shops"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; }   $query .= "limit" . $page_num*10 . ", 10" ; limit句の使い方等間違いはないのかなと思うのですが、いかがでしょうか? アドバイスご教示いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • sql offset

    offsetやlimitをつけると 結果が表示されなくなります。 $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? だけのSQLだと結果は表示されるのですが。 解決方法をご教授お願いいたします。 下記はソースです。 $page=1; $limit=2; $offset = $limit * ($page - 1); $lastpage = ceil($total / $limit); if($brandid=='') { $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; }else{ $sql='SELECT naiyo FROM zyoho WHERE cityid=? AND brandid=?ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; } $stmt=$dbh->prepare($sql); $data[]=$cityid; $data[]=$brandid; $stmt->execute($data); $dbh = null;

    • ベストアンサー
    • MySQL
  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 秀丸でSQLを書く際に SQLの予約語だけ大文字

    秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。

  • SQLが思うように抽出されなくて困っています。

    MySQL のJavaです。 パラメータに、iPara_food_idとiPara_kind_idを与え、 1)comment_textが、null か、空っぽで、 2)limit_date が最大、 3)のレコードを1件抽出したいのですが、 String strSQL = "SELECT record_id, color_id FROM foods" + " WHERE" + " (food_id = " + 123455/*iPara_food_id*/ + ")" + " AND (kind_id = " + 1545334/*iPara_kind_id*/ + ")" + " AND (comment_text IS NULL) OR (LENGTH(comment_text) = 0)" + " AND (delete_flag = false)" + " ORDER BY limit_date DESC" + " LIMIT 1"; テーブルとソースを何度も見直したり、 値を変更してみたり、 パラメータの値を変更してみたり、 したのですが、 パラメータに、iPara_food_idとiPara_kind_id。 何を与えても、同じレコードを抽出してきます。 それは、30件ほどのレコードの中で、 日付が途中くらいのもので、comment_text が空の ものです。 comment_textが空のレコードは、 2件あるのですが、 固定で抽出してくるレコードは、 日付の大きいほうです。 なぜ、パラメータが聞かないのでしょうか? ※上記、思い切って、むちゃくちゃな、数値を  指定していますが、それでも、同じレコードを  抽出してきます。

    • ベストアンサー
    • MySQL
  • PL/SQL での判定(分岐?)の仕方を教えてください!

    PL/SQLで、以下の(1)の処理があった場合、 (2)はどのようにすればいいでしょうか? ※(2)は2つのどちらかの場合に処理をするような 判定をしたいのですが "OR" は使えないですよね? (1)個人IDを取得している場合(NULL以外) IF kojin_id NOT NULL THEN BEGIN SELECT KANRI_NO --管理NOを取得 FROM AAA WHERE KOJIN_ID = kojin_id; EXCEPTION WHEN NO_DATA_FOUND zero_check_flg := 1; --(2)で判定する用のチェックフラグ(※(2)の判定で使えるかなと思ったので) END; END IF; (2)個人IDがNULL、または、(1)で管理NOが取得できなかった場合   ↑   ここの判定文が作れません!!!!!

  • 別テーブルからSELECTした値を持つ行を削除するSQLは?

    削除 SQL がわかりません。 SQL-1 SELECT id FROM table2 WHERE date_in IS NULL; これで取得したidを持つレコード(別テーブル)を削除したいのですが、 どうすれば組み合わさるのでしょうか? DELETE FROM table1 WHERE id=???

  • OracleのSQLでツリー表示取得

    いつもお世話になります。 SQLの質問なのですが、現在プロジェクトから離れていった方が書かれたSQLが違っていたので、いろいろと修正してみたのですがうまく値が取れないのでどこが間違っているかご相談したく 記述したSQL: SELECT * FROM XXXTBL WHERE keyID = 'aaa' START WITH PARENT_ID=0 CONNECT BY PRIOR PARENT_ID=ID ORDER BY ID; とりたい値:   id  項目名  PARENT_ID   0    親   null 2 A    0 3 B 0 4 B-1 3 とってきた値   id  項目名  PARENT_ID   0    親   null   0    親   null 2 A    0 3 B 0 となります。 いろいろと調べてみたのですが、何が違うのか判らず・・・・・ 現在は調査というレベルなので、テーブルには上記の4レコードのみが入っています。 keyIDは全レコードに同一のものが入っています。 もしかしたら、すごく基本なことなのかもしれませんが よろしくご教授お願いいたします。