基于当前行和上一行填充列';s值mysql

基于当前行和上一行填充列';s值mysql,mysql,updating,Mysql,Updating,我有一张像这样的表tb1: ID DATE_ STATs 1 2007-01 0.2 1 2007-02 0.12 1 2007-03 0.42 1 2007-04 0.23 1 2007-05 0.26 1 2007-06 0.17 2 2007-01 0.33 2 2007-02 0.14 2 2007-03 0

我有一张像这样的表
tb1

ID      DATE_     STATs 
1      2007-01     0.2
1      2007-02     0.12
1      2007-03     0.42
1      2007-04     0.23
1      2007-05     0.26
1      2007-06     0.17
2      2007-01     0.33
2      2007-02     0.14
2      2007-03     0.21
2      2007-04     0.35
2      2007-05     0.67
2      2007-06     0.07
如何添加由以下公式计算的附加列:

(1+current.STATs) / (1+priorMonth.STATs) - 1

对于每个ID?

初步:为了使事情更简单,将
日期
和实际
日期
设置为。通常用一个月的第一天来表示它。我就是这么做的

选项1:使用子查询

SELECT
    id, date_, 
    (1.0 + stats) / (1.0 + (SELECT stats FROM t t_prev WHERE t_prev.id = t.id AND t_prev.date_ = t.date_ - interval 1 month)) - 1.0 AS r
FROM
    t
ORDER BY
    id, date_ ;
选项2:(左)在一个月前加入同一个表

SELECT
    curr.id, curr.date_, (1.0 + curr.stats) / (1 + prev.stats) - 1.0 AS r
FROM
    t AS curr
    LEFT JOIN t AS prev 
        ON prev.id = curr.id AND prev.date_ = curr.date_ - interval 1 month 
ORDER BY
   curr.id, curr.date_ ;
在这两种情况下,您将获得:

id | date_ | r -: | :--------- | -------------------: 1 | 2007-01-01 | null 1 | 2007-02-01 | -0.06666667121979919 1 | 2007-03-01 | 0.26785713418538926 1 | 2007-04-01 | -0.13380280596423388 1 | 2007-05-01 | 0.024390232674120105 1 | 2007-06-01 | -0.07142856298120104 2 | 2007-01-01 | null 2 | 2007-02-01 | -0.14285715085991468 2 | 2007-03-01 | 0.06140350246565207 2 | 2007-04-01 | 0.11570248045838927 2 | 2007-05-01 | 0.23703705486119708 2 | 2007-06-01 | -0.35928144335037204 id |日期| r -: | :--------- | -------------------: 1 | 2007-01-01 |空 1 | 2007-02-01 | -0.06666667121979919 1 | 2007-03-01 | 0.26785713418538926 1 | 2007-04-01 | -0.13380280596423388 1 | 2007-05-01 | 0.024390232674120105 1 | 2007-06-01 | -0.07142856298120104 2 | 2007-01-01 |空 2 | 2007-02-01 | -0.14285715085991468 2 | 2007-03-01 | 0.06140350246565207 2 | 2007-04-01 | 0.11570248045838927 2 | 2007-05-01 | 0.23703705486119708 2 | 2007-06-01 | -0.35928144335037204
您可以在dbfiddle查看所有内容

谢谢。左连接方法对我来说更可取,看起来很好,很清晰!