SQL Server查询顶行以选择条件

时间:2013-01-05 11:56:46

标签: sql sql-server database

我想跳过前5条记录,然后选择10条记录

email中有一列user。在这里,我尝试使用此查询

从表user中选择前10个唯一行
select DISTINCT TOP 10 email from user

现在我试图从跳过前5个记录的表中选择前10个唯一行

select DISTINCT SKIP 5 TOP 10 email from user

未完成并返回错误..任何人都可以帮助我

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这是一种方法。我喜欢将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

答案 2 :(得分: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

答案 3 :(得分:1)

这个怎么样:

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

我认为你正在使用SKIP错误,它应该是ORDER BY子句的一部分。

答案 4 :(得分:1)

SELECT DISTINCT TOP(10) Email FROM TableName WHERE Email not in (SELECT TOP(5) Email From TableName)

您可以尝试使用此代码,在此查询中,获取10个不同的电子邮件ID会跳过您在此问题中所说的5条记录。