我有一张日期列表。这些不是在数据库中排序的,而是使用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
答案 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
答案 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