sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga:Hur kan jag få data från rad med nummer 1000 direkt?

row_number är det bästa tillvägagångssättet men eftersom du bara vill ha en enda rad se till att titta på planen. Det kan visa sig bättre att identifiera den önskade raden och sedan gå tillbaka till den ursprungliga tabellen för att hämta ytterligare kolumner.

WITH T1
     AS (SELECT *,
                ROW_NUMBER() OVER (ORDER BY number) AS RN
         FROM   master..spt_values)
SELECT name,
       number,
       type,
       low,
       high,
       status
FROM   T1
WHERE  RN = 1000;

Ger

WITH T2
     AS (SELECT number,
                type,
                name,
                ROW_NUMBER() OVER (ORDER BY number) AS RN
         FROM   master..spt_values)
SELECT TOP 1 C.name,
             C.number,
             C.type,
             C.low,
             C.high,
             C.status
FROM   T2
       CROSS APPLY (SELECT *
                    FROM   master..spt_values v
                    WHERE  v.number = T2.number
                           AND v.type = T2.type
                           AND ( v.name = T2.name
                                  OR ( v.name IS NULL
                                       AND T2.name IS NULL ) )) C
WHERE  RN = 1000;  

Ger



  1. TINYINT vs ENUM(0, 1) för booleska värden i MySQL

  2. SELECT vs UPDATE prestanda med index

  3. Givet år, månad, dag och veckonummer hur hittar man datumet? (Sql Server 2005 Set baserad)

  4. tabelldesign + SQL-fråga