假设我有一张类似于:
的表格+-------+
| FIELD |
+-------+
| 1000 |
| 1200 |
| 1300 |
| 900 |
| 1400 |
+-------+
如何执行SELECT
查询以检索行0..N
,但不是获取它们的值,而是获得每行前一行的算术差异,i。即RESULT(N) = ROW(N) - ROW(N-1)
?我希望得到类似的东西:
+--------------+
| RESULT |
+--------------+
| (EMPTY OR 0) |
| 200 |
| 100 |
| -400 |
| 500 |
+--------------+
我正在使用DB2
。如果您向我提供一些不特定于特定SQL DBMS的可移植响应,那将会非常酷。
提前致谢!
答案 0 :(得分:2)
您需要的是LAG
功能。它存在于多个数据库中,包括db2
语法将是这样的
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