0

假设我有一张类似的表格:

+-------+
| FIELD |
+-------+
| 1000  |
| 1200  |
| 1300  |
| 900   |
| 1400  |
+-------+

如何执行SELECT查询以检索行0..N,而不是获取它们的值,而是获取与每一行的前一行的算术差异,即RESULT(N) = ROW(N) - ROW(N-1)?我希望得到类似的东西:

+--------------+
| RESULT       |
+--------------+
| (EMPTY OR 0) |
| 200          |
| 100          |
| -400         |
| 500          |
+--------------+

我正在使用DB2. 如果您向我提供一些并非特定于特定 SQL DBMS 的可移植响应,那将非常酷。

提前致谢!

4

1 回答 1

2

你需要的是LAG功能。它存在于多个数据库中,包括

语法是这样的

SELECT CASE WHEN LAG(MyField, 1) OVER ( PARTITION BY MyID ORDER BY SomeThing ) IS NULL THEN 0
            ELSE MyField - LAG(MyField, 1) OVER ( PARTITION BY MyID ORDER BY SomeThing )
       END AS Result
    FROM MyTable

LAG来自 IBM 的文档

于 2014-03-26T17:50:39.603 回答