高效计算 SQL 表中的行值差异
本指南演示了两种计算 SQL 表中连续行值之间差异的方法,重点关注非顺序表结构。 第一种方法适用于所有 SQL 版本,而第二种方法则利用窗口函数来提高 SQL Server 2012 及更高版本的性能。
方法一:自加入(所有 SQL 版本)
此方法使用 LEFT JOIN
根据行标识符将每行与其后续行进行比较(本例中为 rowInt
)。
<code class="language-sql">SELECT current.rowInt, current.Value, ISNULL(next.Value, 0) - current.Value AS ValueDifference FROM sourceTable AS current LEFT JOIN sourceTable AS next ON next.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > current.rowInt)</code>
ISNULL
函数处理行没有后继(最后一行)的情况,分配差值 0 以避免 NULL
值。
方法 2:LEAD() 窗口函数(SQL Server 2012 及更高版本)
为了提高较新 SQL Server 版本的效率,LEAD()
窗口函数提供了更简化的解决方案:
<code class="language-sql">SELECT RowInt, Value, LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value AS ValueDifference FROM sourceTable</code>
LEAD(Value, 1, 0)
检索下一行(偏移量 1)的值,如果不存在下一行,则默认为 0。 这直接计算差异,消除了自连接的需要。 这种方法通常更快且更具可读性。
以上是如何计算 SQL 表中的行值差异?的详细内容。更多信息请关注PHP中文网其他相关文章!