2

最初の5レコードをスキップしてから、10レコードを選択したい

emailテーブルに列がありますuseruserここでは、このクエリを使用してテーブルから上位10の一意の行を選択しようとしています

select DISTINCT TOP 10 email from user

今、私は最初の5つのレコードをスキップしてテーブルから上位10の一意の行を選択しようとしています

select DISTINCT SKIP 5 TOP 10 email from user

これは行われず、エラーが返されます..誰かが私を助けることができます

4

5 に答える 5

3
SELECT A.NAME FROM
(SELECT distinct RANK() OVER(ORDER BY NAME) RNK,NAME FROM USERS) A
WHERE A.RNK>4 AND A.RNK<16

を使用しLIMITても、適切な順序で一番上の行を取得できるとは限りません。ANALYTIC関数を使用すると、適切な結果が得られます。

SQL_LIVE_DEMO

于 2013-01-05T12:07:51.917 に答える
2

ここにそれを行う1つの方法があります。特に複雑ではありませんが、クエリを理解しやすくするために、このようないくつかの場合に Common Table Expressions を使用するのが好きです。

WITH CTE AS
(
    Select Distinct Email From User
 )
 ,
 CTE1 AS
 (
    Select Email, ROW_NUMBER() over (ORDER BY Email) AS RowNumber
    From CTE
 )

Select Top 10 * From CTE1 Where RowNumber > 5
于 2013-01-05T12:10:25.727 に答える
1

これはどう:

SELECT * 
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY email) AS row 
      FROM user ) a 
WHERE row > 5 and row <= 10

SKIPを誤って使用していると思います。これは、ORDERBY句の一部である必要があります。

于 2013-01-05T12:25:29.250 に答える
1
with t2 as
(
select t1.*,
 row_number() over (order by id) rn 
from 
  (select email, max(id) as id from [user] group by email) as  t1
)

select * from t2 where rn between 5 and 10
于 2013-01-05T12:10:17.470 に答える