使用 SQL 计算数据库表中连续行之间的差异
假设您有一个数据库表,其中包含一个非连续整数作为行标识符 (rowInt
) 和一个数值 (Value
)。 挑战是使用 SQL 有效计算连续行 Value
之间的差异。
像这样的简单查询将检索数据:
<code class="language-sql">SELECT * FROM myTable ORDER BY rowInt;</code>
但是,我们需要计算并显示差异。 所需的输出格式是:
<code>rowInt Value Diff 2 23 22 --45-23 3 45 -35 --10-45 9 10 -45 --0-45 17 0 0 --0 (or NULL, depending on desired behavior)</code>
以下是如何使用带有子查询的自连接来实现此目的:
<code class="language-sql">SELECT c.rowInt, c.Value, ISNULL(n.Value, 0) - c.Value AS Diff FROM myTable AS c LEFT JOIN myTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM myTable WHERE rowInt > c.rowInt) ORDER BY c.rowInt;</code>
此查询对表 (LEFT JOIN
) 执行 myTable
操作,别名为 c
(当前)和 n
(下一个)。 ON
子句中的子查询查找大于当前行 rowInt
的最小值 rowInt
,从而有效地标识下一行。 ISNULL(n.Value, 0)
处理没有下一行(最后一行)的情况,用 0 替换缺失的 n.Value
。 然后计算差异并将其别名为Diff
。最后的 ORDER BY
子句确保结果以正确的顺序呈现。 或者,您可以使用 COALESCE
而不是 ISNULL
。 选择取决于您特定的数据库系统。
以上是如何使用SQL计算数据库表中连续行之间的值差异?的详细内容。更多信息请关注PHP中文网其他相关文章!