ASP.NET SQL Server Выберите верхние значения N, но пропустите M результатов
Я работаю над проектом 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>
Это то, что у меня есть до сих пор, но я не могу найти какую-либо информацию в Интернете о том, как пропустить запись
Ответы
Ответ 1
Вы можете использовать фильтр или сделать это в 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
Для 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
Но есть более эффективные способы реализации разбивки на страницы, если это действительно то, что вам нужно.
Ответ 3
Взгляните на sql, сгенерированный в ответе на этот вопрос efficient-way-to-make-paging-on-sql-server-2008
Ответ 4
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