Eya*_*lah 6 sql-server t-sql sql-server-2012
我有以下查询,它从新闻文章表中选择。由于多种排序因素,我找不到日期的下一页。
我拥有的参数是查询结果集中的最后一个ID,那么我如何才能获取下一页...同样,我没有页面索引,我只有上一个查询结果集中的最后一个ID
SELECT TOP (20) id, DATEDIFF(SECOND, CONVERT(DATETIME, '1970-01-01', 102), release_date) AS date, DATEDIFF(SECOND, CONVERT(DATETIME, '1970-01-01',
102), edit_date) AS lastchanged, important
FROM articles AS news WITH (NOLOCK)
WHERE (status = 1) AND (release_date <= GETUTCDATE())
ORDER BY important DESC, date DESC, lastchanged DESC
Run Code Online (Sandbox Code Playgroud)
这是我的数据的一个例子
id date lastchanged important
187346 1366070400 1345212540 1
187306 1365984000 1345290300 1
187330 1365984000 1342457880 1
187344 1363392000 1342461540 1
187343 1363392000 1342461300 1
187342 1363392000 1342459980 1
187339 1363392000 1342459800 1
187337 1363392000 1342458960 1
187335 1363392000 1342458720 1
187334 1363392000 1342458600 1
187332 1363392000 1342458060 1
187331 1363392000 1342457940 1
187327 1363392000 1342457340 1
187328 1363392000 1342457340 1
187326 1363392000 1342456860 1
187323 1363392000 1342456020 1
187322 1363392000 1342455480 1
187321 1363392000 1342454700 1
187316 1363392000 1342454580 1
187320 1363392000 1342454520 1
Run Code Online (Sandbox Code Playgroud)
你可以用 row_number() 做这样的事情。性能可能取决于每天有多少活跃文章。
此代码根据您提供的排序创建一个 seq,然后找到最后一个 Id 值的序列,您可以使用它来获取前 (x) 行。
declare @LastId INT,
@PageSize INT
set @LastId = 187322
set @PageSize = 2
;with cte
as(
SELECT *, seq = ROW_NUMBER() over(ORDER BY important DESC, release_date DESC, edit_date DESC)
FROM @demo d
WHERE
status = 1
AND release_date <= GETUTCDATE()
)
select TOP (@PageSize) *
from cte t1
where t1.seq > (select seq from cte t2 where id = @LastId)
Order by t1.seq
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15560 次 |
| 最近记录: |