gpt4 book ai didi

SQL ROW_NUMBER() 分页问题

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:55 25 4
gpt4 key购买 nike

我使用 ROW_NUMBER() 函数从数据库表中获取 50 x 50 项。
@From 参数是从中开始抓取 50 行的行。 (51,101,151等第一次是1)
我将参数 @CityId 传递给存储过程,如果数据库中的前 60 行是 cityId=1 并且 cityId = 2 在第 61 行中,则此存储程序不返回结果。
但是,如果我传递@From 参数51,它会返回结果。我在这里做错了什么?

SELECT  RowConstrainedResult.*
FROM ( SELECT ROW_NUMBER() OVER
( ORDER BY f.ItemCreatedOnDate DESC ) AS RowNum,
f.*
FROM (
SELECT
t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items as t
) f) AS RowConstrainedResult
WHERE RowNum >= @From
AND RowNum < @From + 50
AND CityId = @CityId

最佳答案

在您的版本中,ROW_NUMBER() 正在枚举所有行。将 cityid 的谓词移动到最里面的选择,ROW_NUMBER() 将仅枚举 cityid = 2 的行。

SELECT RowConstrainedResult.*
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY f.ItemCreatedOnDate DESC) AS RowNum,
f.*
FROM (
SELECT t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items AS t
WHERE CityId = @CityId
) AS f
) AS RowConstrainedResult
WHERE RowNum >= @From AND
RowNum < @From + 50

关于SQL ROW_NUMBER() 分页问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com