【发布时间】:2011-07-25 21:28:55
【问题描述】:
考虑下表:
SELECT id, value FROM table ORDER BY id ASC;
+-----+---------+
| id | value |
+-----+---------+
| 12 | 158 |
| 15 | 346 |
| 27 | 334 |
| 84 | 378 |
| 85 | 546 |
+-----+---------+
id 列是自动递增的,但包含间隙。 value 列是数字。
我想通过设置value 相对于上面两行的value 来查看value 随着时间的增加。那是行id=85 我想设置行id=85 (546) 的value 与行id=27 (334) 的value 相关。因此,要为行 id=85 计算的值是 546/334=1.63473。
这是我想要达到的结果:
SELECT id, value, ...;
+-----+---------+---------------------+
| id | value | value/lag(value, 2) | (the syntax value/lag(value, 2) is made up)
+-----+---------+---------------------+
| 12 | 158 | NULL |
| 15 | 346 | NULL |
| 27 | 334 | 2.11392 | (334/158=2.11392)
| 84 | 378 | 1.09248 | (378/346=1.09248)
| 85 | 546 | 1.63473 | (546/334=1.63473)
+-----+---------+---------------------+
如何在 MySQL 中执行这种滞后?
请注意,id 列包含间隙,因此仅使用 t1.id = t2.id - 2 加入同一个表是行不通的。
【问题讨论】:
-
SQL 标准中有一个 lag() 函数,但是 MySQL 不支持这个。
标签: mysql sql data-analysis sliding-window