1. ホーム
  2. mysql

[解決済み] SQLデータベースのテーブルでn番目の行を選択する方法は?

2022-03-23 19:54:08

質問

私は、いくつかの(理想的には)データベースに依存しない n の行をデータベーステーブルから取得することができます。また、以下のデータベースのネイティブな機能を使って、どのように実現できるかも興味深いです。

  • SQLサーバー
  • MySQL
  • PostgreSQL
  • SQLite
  • オラクル

私は現在、SQL Server 2005で以下のようなことを行っていますが、他の方のよりアグノスティックなアプローチを見てみたいと思います。

WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000

上記SQLのクレジット Firoz Ansariのウェブログ

更新しました。 参照 Troels Arvinの回答 標準SQLに関するものです。 Troelsさん、何か引用できるリンクはありますか?

解決方法は?

標準のオプションの部分でこれを行う方法がありますが、多くのデータベースが独自の方法をサポートしています。

このことや他のことについても書かれているとても良いサイトがあります。 http://troels.arvin.dk/db/rdbms/#select-limit .

基本的にPostgreSQLとMySQLは非標準に対応しています。

SELECT...
LIMIT y OFFSET x 

Oracle、DB2、MSSQLは、標準のウィンドウ関数に対応しています。

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
) AS foo
WHERE rownumber <= n

(私はこれらのDBを使うことがないので、上記のリンク先のサイトからコピーしたものです)

更新してください。 PostgreSQL 8.4では、標準のウィンドウ関数がサポートされているので、2番目の例はPostgreSQLでも動作することを期待しています。

更新しました。 SQLiteは2018-09-15のバージョン3.25.0でウィンドウ関数のサポートを追加したため、両フォームともSQLiteで動作するようになりました。