Mysql:使用从另一列复制的值创建一个新列,但移动一行

标签 mysql sql

我有一个表a,其中包含两列idvalue,如下所示:

+-------+-----------+
|   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/

相关文章:

mysql - 如何将 csv 导出文件名添加到 mysql 查询?

mysql - Material list : One table for everything, 或每个子级别的表格?

sql - MySql 多次计算同一列

mysql 三个最后一个

mysql - 连接多个(超过 3 个)表的顺序是什么以及在哪里放置条件?

php - 忽略 MySQL REGEXP 查询中的常用词 (the, and)

mysql - 如何在 XAMPP 中启用 FEDERATED 引擎

mysql - 过程中的光标不返回任何值

javascript - 携带一行的id到modal

sql - 从两个带有循环外键的表中删除