在SQL查询中复制和移动列

时间:2015-09-02 15:54:28

标签: mysql sql

我有一张日期列表。这些不是在数据库中排序的,而是使用SQL SELECT查询。

我想要计算两个区间。第一个不是问题,它计算同一行中日期之间的间隔。

Date 1      Date 2      (Interval 1)
1950-01-01  1960-01-01  (10.00)
1951-07-01  1962-01-01  (10.50)
1952-04-01  1964-07-01  (11.25)
1953-07-01  1968-10-01  (15.25)
1958-01-01  1970-01-01  (12.00)

但是,我还想计算行的日期1和它上面的行的日期2(在SQL SELECT输出中)之间的差异。基本上我希望将日期2列复制并向下移动一行(或某种效果),以​​便我可以计算间隔2。

Date 1      Date 2      Interval 1  Date 2_shift  Interval 2
1950-01-01  1960-01-01  10.00       
1951-07-01  1962-01-01  10.50       1960-01-01    8.50 
1952-04-01  1964-07-01  11.25       1962-01-01    9.75
1953-07-01  1968-10-01  15.25       1964-07-01    11.00
1958-01-01  1970-01-01  12.00       1968-10-01    10.75

3 个答案:

答案 0 :(得分:1)

您需要做的是在查询中添加一个行号列,然后在firstinstance.rownumber = secondinstance.rownumber + 1

上将其自身加入

然后你可以做你需要的微积分。

希望这有帮助!

答案 1 :(得分:1)

与@Mihai提到的一样,您需要使用row_number字段并执行左连接以获取之前的日期值:

SET @row_number:= 0;
SET @row_number1:= 0;

select q1.*
      ,q2.Date2 as PreviousDate
from
(SELECT @row_number:= @row_number + 1 AS row_number
        ,dt.*
FROM datetable dt
) q1
left join (SELECT @row_number1:= @row_number1 + 1 AS row_number
        ,dt.*
FROM datetable dt
) q2 on q1.row_number-1 = q2.row_number

SQL Fiddle Demo

答案 2 :(得分:0)

ALTER TABLE table_name CHANGE column_name column_name datatype(length) AFTER column_name

例如:ALTER TABLE table_name CHANGE Date 2 Date 2 datatype(length)AFTER Interval 1