SQL Server:如何正确检测特定列中的行值已更改,并按另一个列对输出进行排序?



我正在尝试检测行更改及其发生的行号,按特定列(日期(排序。

这是我正在使用的查询:

WITH x AS 
(
SELECT 
*, rn = ROW_NUMBER() OVER (ORDER BY date ASC) 
FROM 
[dbo].[DB]
)
SELECT 
x.var1, x.var2, x.date, x.rn as RN, x.var3 
FROM 
x 
LEFT OUTER JOIN 
x AS y ON x.rn = y.rn + 1 AND x.var1 <> y.var1 
WHERE 
y.var1 IS NOT NULL 

但是,我得到的输出并不总是相同的。有时数据按日期排序,有时则不按日期排序。另外,我并不总是得到所有的行更改。

这里可能出了什么问题?

任何帮助将不胜感激。

示例...

WITH x AS (
SELECT A.*
, rn = ROW_NUMBER() OVER (ORDER BY date, var1, var2, var3 ASC)
FROM [dbo].[DB] A)
SELECT x.var1, x.var2, x.date, x.rn as RN, x.var3 
FROM x 
LEFT OUTER JOIN x AS y 
ON x.rn = y.rn + 1 
AND x.var1 <> y.var1 
WHERE  y.var1 IS NOT NULL 
ORDER BY Date, RN

ROW_NUMBER() OVER (ORDER BY date asc, var1, var2, var3 ASC)之后可以具有唯一标识表中记录的任何字段date asc

问题是当系统订购 db.date 时,几条记录具有相同的日期。 由于您尚未为这些其他记录指定任何顺序,因此系统可以自由地将它们按任何顺序排列;因此,您可以在每次运行的记录上获得不同的行号。

由于您尚未在外部查询中指定order by date, rn,因此这些结果也可能以任何顺序返回。

相关内容

  • 没有找到相关文章

最新更新