Mysql:创建一个新列,其中的值从另一列复制但是一行移位

时间:2018-03-26 21:13:35

标签: 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     |
+-------+-----------+-------------+

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用:

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

答案 1 :(得分:0)

我认为最简单的方法如下:

  1. 创建按值
  2. 排序的初始两列表
  3. 将表导出到csv文件

    SELECT * FROM a
    INTO OUTFILE "your_csv_file.csv"
    FIELD ENCLOSED BY '"'
    TERMINATED BY ';'
    ESCAPED BY '"'
    LINES TERMINATED BY '\r\n'
    
  4. 使用第三列编辑表格(复制并经过第二列并将最后一行的值更改为inf);您可以使用Excel轻松完成此操作
  5. 使用第3列创建新表
  6. 将文件导入MySql

    LOAD DATA INFILE 'your_csv_file.csv' 
    INTO TABLE your_table_name 
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\r\n'
    IGNORE 1 ROWS;