我有一个表a
,其中包含两列id
、value
,如下所示:
+-------+-----------+
| id | value |
+-------+-----------+
| 1 | 12 |
| 2 | 15 |
| 3 | 30 |
| 4 | 40 |
| 5 | 45 |
| 6 | 50 |
| 7 | 80 |
| 8 | 90 |
+-------+-----------+
我想编写一个查询来创建一个新列 shiftedValue
,其值较大但最接近 value
。如果value
已经是最大的,我们将shiftedValue
设置为inf
,参见最后一行。所需的表格如下,
+-------+-----------+-------------+
| id | value | shiftedValue|
+-------+-----------+-------------+
| 1 | 12 | 15 |
| 2 | 15 | 30 |
| 3 | 30 | 40 |
| 4 | 40 | 45 |
| 5 | 45 | 50 |
| 6 | 50 | 80 |
| 7 | 80 | 90 |
| 8 | 90 | inf |
+-------+-----------+-------------+
有什么建议吗?
最佳答案
你可以使用这个:
SELECT a.id, a.value, IFNULL(b.value, 'inf') shiftedValue
FROM a as a LEFT JOIN a as b ON a.id = b.id - 1
您可以围绕此添加逻辑,以在 b.id 为 NULL 时添加 inf
。
关于Mysql:使用从另一列复制的值创建一个新列,但移动一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500698/