ASP.NET SQL Server选择前N个值但跳过M个结果

时间:2010-04-07 21:11:57

标签: asp.net sql sql-server

我正在开发一个ASP.Net项目,用于在数据库中显示网站上的信息。我想从新闻表中选择前10项,但跳过第一项,我遇到了一些问题。

<asp:SqlDataSource ID="SqlDataSource1" 
                   runat="server" ProviderName="System.Data.SqlClient"
                   ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>" 
                   SelectCommand="SELECT top 5 [id], 
                                               [itemdate], 
                                               [title], 
                                               [description], 
                                               [photo] 
                                  FROM [Announcements] order by itemdate desc">
</asp:SqlDataSource>

这是我到目前为止所得到的,但我在网上找不到有关如何跳过记录的任何信息

4 个答案:

答案 0 :(得分:9)

对于SQL Server 2005+,请使用:

SELECT x.*
  FROM (SELECT t.id,
               t.itemdate,
               t.title,
               t.description,
               t.photo,
               ROW_NUMBER() OVER (ORDER BY t.itemdate) AS rank
          FROM ANNOUNCEMENTS t) x
 WHERE x.rank BETWEEN a AND b

但是,如果真的是你所追求的,那么有更好的实施分页的方法。

答案 1 :(得分:8)

您可以使用过滤器或在SQL中执行此操作:

SELECT top 10 
      [id], 
      [itemdate], 
      [title], 
      [description], 
      [photo] 
    FROM [Announcements]
    WHERE id <> (select TOP 1 id from announcements order by itemdate desc)
    order by itemdate desc    

编辑:我从字面上看“跳过第一个项目”。也许这不是你的意思?

答案 2 :(得分:1)

看一下这个问题efficient-way-to-make-paging-on-sql-server-2008

的答案中生成的sql

答案 3 :(得分:0)

DECLARE @topid int
select @topid = max(id) from announcements group by itemdate, id 

SELECT top 10 [id], [itemdate], [title], [description], [photo]      
FROM [Announcements] A
WHERE A.id <> @topid
order by itemdate desc