0

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() 会发生变化,并且分页功能会变得混乱。

请帮忙!!!明天必须赶上最后期限。

4

1 回答 1

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 的表(以及不受版本控制影响的任何其他详细信息),然后是另一个包含每个版本的记录的表。但这是另一个问题!

于 2013-10-08T11:30:29.223 回答