2017-10-07 42 views
0

一個差異列我有以下結構的表:如何創建組的MySQL

Id_no | year | 
    -------------- 
    22222 | 1999 | 
    22255 | 2000 | 
    ..... 

我試圖創建具有以下結構的表中的DIFF列,因此,這將是單獨完成每個ID:

Id_no | year | diff 
    -------------------- 
    22222 | 1999 | 0 
    22222 | 2000 | 1 
    22222 | 2005 | 5 
    55555 | 2000 | 0 
    55555 | 2014 | 14 

我試圖做到以下幾點:

select x.Id_no, 
     x.year, 
     IFNULL(x.year - max(y.year), 0) AS diff 
    from my_table x 
    left 
    join my_table y 
    on y.year < x.year 
    group by 
    x.Id_no, 
    x.year 
    order by x.Id_no 

結果並不如前pected我懷疑DIFF的計算是不工作,因爲我預期例如:

 Id_no | year | diff 
    ---------------------- 
    2898 | 1997 | 1 
    2898 | 1989 | 2 

1997年和1989年之間的差異是不2

+0

您的示例數據有兩個不同的'id_no's。我不確定預期的結果應該是什麼意思。 –

+0

你是對的,我修正了我的例子 – Bata

回答

0

我建議一個相關子查詢:

select t.*, coalesce(year - prev_year, 0) as diff 
from (select t.*, 
      (select max(t2.year) 
       from my_table t2 
       where t2.id_no = t.id_no and 
        t2.year < t.year 
      ) prev_year 
     from my_table t 
    ) t; 

這可以避免所有數據上的group by,並且可以使用my_table(id_no, year)上的索引。

此外,中間子查詢是沒有必要的。我只是把它包括在內,這樣你就可以看到前一年的情況和差異。