SQL veritabanı tablosunda n'inci satır nasıl seçilir?

Bir veritabanı tablosundan n'inci satırı seçmenin bazı (ideal olarak) veritabanından bağımsız yollarını öğrenmekle ilgileniyorum. Bunun aşağıdaki veritabanlarının yerel işlevselliği kullanılarak nasıl başarılabileceğini görmek de ilginç olacaktır:

  • SQL Server
  • MySQL
  • PostgreSQL
  • SQLite
  • Oracle

Şu anda SQL Server 2005'te aşağıdaki gibi bir şey yapıyorum, ancak diğerlerinin daha agnostik yaklaşımlarını görmek isterim:

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

Yukarıdaki SQL için kredi: Firoz Ansari'nin Web Günlüğü

Güncelleme: SQL standardı ile ilgili olarak Troels Arvin'in yanıtına bakın. *Troels, alıntı yapabileceğimiz herhangi bir bağlantın var mı?

ADD:

LIMIT n,1

Bu, sonuçları n. sonuçtan başlayarak bir sonuçla sınırlayacaktır.

Yorumlar (0)

LIMIT n,1 MS SQL Server'da çalışmaz. Sanırım bu sözdizimini desteklemeyen tek büyük veritabanı bu. Adil olmak gerekirse, bu SQL standardının bir parçası değildir, ancak olması gerektiği kadar yaygın bir şekilde desteklenmektedir. SQL sunucusu dışındaki her şeyde LIMIT harika çalışır. SQL server için zarif bir çözüm bulamadım.

Yorumlar (2)

İşte yakın zamanda Oracle için yazdığım ve dinamik sayfalama/sıralamaya izin veren bir sproc'un genel bir sürümü - HTH


-- p_LowerBound = first row # in the returned set; if second page of 10 rows,
--                this would be 11 (-1 for unbounded/not set)
-- p_UpperBound = last row # in the returned set; if second page of 10 rows,
--                this would be 20 (-1 for unbounded/not set)

OPEN o_Cursor FOR
SELECT * FROM (
SELECT
    Column1,
    Column2
    rownum AS rn
FROM
(
    SELECT
        tbl.Column1,
        tbl.column2
    FROM MyTable tbl
    WHERE
        tbl.Column1 = p_PKParam OR
        tbl.Column1 = -1
    ORDER BY
        DECODE(p_sortOrder, 'A', DECODE(p_sortColumn, 1, Column1, 'X'),'X'),
        DECODE(p_sortOrder, 'D', DECODE(p_sortColumn, 1, Column1, 'X'),'X') DESC,
        DECODE(p_sortOrder, 'A', DECODE(p_sortColumn, 2, Column2, sysdate),sysdate),
        DECODE(p_sortOrder, 'D', DECODE(p_sortColumn, 2, Column2, sysdate),sysdate) DESC
))
WHERE
    (rn >= p_lowerBound OR p_lowerBound = -1) AND
    (rn 
Yorumlar (0)