• ベストアンサー

任意値を取得について

sql serverで、先頭からではなく、任意の範囲だけレコードを取り出したいが、limitとoffsetのような方法がありますか。

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

  • ベストアンサー
  • Xaval
  • ベストアンサー率58% (61/105)
回答No.1

SQL Serve 2005なら、ROW_NUMBER()がありますので、それとBETWEENを使う方法があります。ネットで検索できます。 それより古いバージョンなら、一発で出来る方法は無く、以下のコードを参考にしてください。 -- OFFSETは0から始まるとします。 SELECT TOP(@LENGTH) id FROM [TABLE1] T1 WHERE id NOT IN ( SELECT TOP(@OFFSET) id FROM T1 ORDER BY id ASC -- ↓のORDER BYと一致させる ) ORDER BY id ASC -- ↑のORDER BYと一致させる

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 任意値を取得について

    Oracleで、先頭からではなく、任意の範囲だけレコードを取り出したいが、 limitとoffsetのような方法がありますか。

  • レコードを1件のみ取得した後、検索をやめる方法はあるのでしょうか?

    PostgreSQLのデータベースでテーブルから、 "1件のレコードが見つかった時点で、他のレコードを検索するのをやめる" という事はSQLでできるのでしょうか? 【テーブル名 Fruit 】 | id | option | name |  1    2     りんご  2    1     みかん  3    1     メロン  4    1     バナナ  5    4     いちご 上記のようなテーブルから、optionが1のレコードを検索する時、 どのレコードでもいいので、1件見つけた時点で他にも該当のレコードがあるかという検索の処理をしない。 という事はできるのでしょうか? 出来るのであれば、膨大な数のレコードがある場合、検索の時間が減るのでは無いかと思ったのですが・・・ 現在は下記のSQLのように、OFFSETとLIMITを使用して1件のレコードを取得しています。 SELECT      * FROM      Fruit WHERE      option=1 OFFSET 0 LIMIT 1 このやり方であっているのでしょうか? または他の仕方があるのでしょうか? 教えていただきたいです。 宜しくお願いします。

  • 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文によるクリエ結果の先頭と最後のレコードID(ユニークでIDを振っています)を取得すれば、 次のページなら SELECT * FROM table_name id > [先頭レコードID] LIMIT 10; 前のページなら SELECT * FROM table_name id < [最後レコードID] LIMIT 10; とやればいいのかなと思っていますが、クリエ結果の最初と最後のレコードIDを取得する方法がわかりません。 どうか上記の件、ご教授くださいm(_ _)mペコリ

  • mysql

    $sql='SELECT id,kaisyamei, max(day),namae FROM message WHERE memberid=? GROUP BY id LIMIT '.$limit.' OFFSET '.$offset; どこか違いますか?

    • ベストアンサー
    • MySQL
  • 任意の件数の取得

    検索条件にマッチしたレコードのセットのうち、任意の件数、例えば1から100件、101から200件とか、取得する方法というのはありますか? DBはDB2です。 オラクルではあった気がするのですが、DB2は?と思っています。 もっと言うと、実装はHibernateを使用してアクセスしているので、Hibernateでそのような取得方法があるのならそれも教えていただきたいと思っています。 よろしくお願いします。 (ソートして連番ふるviewでも作ればいいのかな…などとも思っています。どうなんでしょ?)

  • 条件によってレコードを取得したい

    Mysqlで以下のような条件のSQL文がわかりません。 hogeというフィールドの値に1があればそのレコードを取得 hogeに1という値のフィールド値をもったレコードがないならhogeが空のレコードを取得したいのですが方法がわかりません。 SELECT * FROM `tebleA` where (`hoge` = '1') or `postageFee_memId` = '' LIMIT 5 上のSQL文ではどうしても「`postageFee_memId` = '' 」のほうが優先されます。 (優先されるのはオートインクリメントIDが小さいから当然ですが・・) 「`hoge` = '1'」が絶対優先されるようにしたいのです。 いわゆる 「`hoge` = '1'」がない場合だけ「`postageFee_memId` = ''」が実行できればと思います。 ifとかを使って条件文をかけばいいのでしょうか? 足らずの情報があればおっしゃってください。 何卒ご教授お願いいたします。

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • 任意の行のselect

    PHP+MySQLでクエリーを実行する際に 「5行目」と「13行目」と「21行目」 のような、任意の行を取得したいと思っています。 LIMIT句で指定をしようとしても 「LIMIT 5,1」(5行目) は分かるのですが、同時に 「LIMIT 13,1」(13行目) と 「LIMIT 21,1」(21行目) を取得する方法は有るのでしょうか?(複数のLIMIT句?)分かる方がいらっしゃいましたら、お教えください。

    • ベストアンサー
    • PHP
  • sql エラー

    エラーが出ます。どこかおかしな点はありますでしょうか。 エラー文 Call to a member function prepare() on a non-object ソース $page = 1; $limit = 2; $offset = $limit * ($page - 1); $sql='SELECT COUNT(*) FROM message WHERE memberid=? GROUP BY aid'; $stmt=$dbh->prepare($sql); $data[]=$memberid; var_dump($data); $stmt->execute($data); $dbh=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); $sql='SELECT aid,max(kaisyamei),max(day) FROM message WHERE memberid=? GROUP BY aid LIMIT '.$limit.' OFFSET '.$offset; $stmt=$dbh->prepare($sql); $stmt->execute($data); $dbh=null; ご教授お願いいたします。

    • ベストアンサー
    • MySQL