使用合并减去列值

时间:2018-07-29 18:28:40

标签: sqlite

我想为“ race”,“ bib”,“ split”分组依据中返回的每个记录减去“ place”列中的值,以使“ diff”列看起来像这样。

所需的输出

     race | bib | split | place | diff  
     ----------------------------------
     10   | 514 | 1     | 5     | 0
     10   | 514 | 2     | 3     | 2 
     10   | 514 | 3     | 2     | 1
     10   | 17  | 1     | 8     | 0
     10   | 17  | 2     | 12    | -4
     10   | 17  | 3     | 15    | -3

我是刚开始使用Coalesce语句,而与期望输出最接近的是以下

select a.race,a.bib,a.split, a.place, 
coalesce(a.place - 
    (select b.place from ranking b where b.split < a.split), a.place) as diff
from ranking a
group by race,bib, split 

产生:

     race | bib | split | place | diff  
     ----------------------------------
     10   | 514 | 1     | 5     | 5
     10   | 514 | 2     | 3     | 2 
     10   | 514 | 3     | 2     | 1
     10   | 17  | 1     | 8     | 8
     10   | 17  | 2     | 12    | 11
     10   | 17  | 3     | 15    | 14

感谢您的光临!

1 个答案:

答案 0 :(得分:0)

要计算差异,您必须在具有相同的racebib值和下一个较小的split值的行中查找值:

SELECT race, bib, split, place,
       coalesce((SELECT r2.place
                 FROM ranking AS r2
                 WHERE r2.race  = ranking.race
                   AND r2.bib   = ranling.bib
                   AND r2.split < ranking.split
                 ORDER BY r2.split DESC
                 LIMIT 1
                ) - place,
                0) AS diff
FROM ranking;