UI上有一个GRID,它将逐页信息显示为“>>”单击按钮。此按钮使用row_number()概念使用存储过程从数据库中获取数据。我从我的UI传递起始行号和结束行号,并相应地传递给存储过程,查询返回表中的值。可以考虑sql查询(200和300是样本凝视和结束行号):
with y
as
(
select
version,
Id ,
row_number() over (order by Id,version) r
from
X
)
select
Id,
version
from
y
where
r>200 and r<300
这一切正常,直到现有Id的新版本进入表格。在这种情况下,现有行的row_number()会发生变化,并且分页函数会搞乱。
请帮忙!!!需要明天的截止日期。
答案 0 :(得分:0)
假设:您只想显示每个ID的最新版本。
好的,你可以确保'X'是过滤的结果列表,因此它只包含每个ID的最新版本。
示例数据
例如,如果您有以下数据 -
ID | Version
1 1
2 1
3 1
4 1
1 2
要获取所有数据,只需从该表返回所有数据,这将返回所有5行(您现在正在执行的操作)。
X的必需结果
您真正想要的是返回以下内容 -
ID | Version
1 2
2 1
3 1
4 1
有很多方法可以获取表中的最新记录,以及数百个stackoverflow的答案。
最新记录查询的示例查询
一种方式(可以改进)是
WITH Y
AS
(
SELECT
t.Id,
MAX(OriginalTable.Ver) as [Verson],
ROW_NUMBER() over (ORDER BY t.Id) as rowNumber
FROM
(SELECT DISTINCT ID FROM @OriginalTable) AS t
INNER JOIN
OriginalTable ON (t.ID = OriginalTable.ID)
GROUP BY
t.Id
)
SELECT
Id, [Verson]
FROM
Y
WHERE
rowNumber > 2 AND rowNumber < 8
诀窍是确保上面查询中的“X”排除重复的行,然后在该列表上实现分页。
替代选项
说了这么多,你可以重新设计你的表,这样你就有了一个只有ID的表(以及你需要的不受版本控制影响的任何其他细节),然后是另一个包含每个版本记录的表。但那是另一个问题!