2017-03-08 33 views
0

我想知道這是否甚至可以純粹用MySQL來完成。通過行之間的差異獲得前5個結果

排名前5位的列表,在同一數據點的2個不同條目之間進行了最大的改進。

id  | year  | amount 
-------+----------+-------- 
1  | 2016  | 4000 
1  | 2017  | 3000 
2  | 2016  | 12000 
2  | 2017  | 15000 
3  | 2016  | 100 
3  | 2017  | 200 

我基本上需要返回23,按照這個順序,因爲2提高超過3

1不應該是一個結果,因爲它在幾年之間沒有改善。

回答

2

檢查在這裏:http://rextester.com/TBX28881

select  f1.id, (f2.amount - f1.amount) balance 
from  foot f1 
inner join foot f2 
on   f2.id = f1.id 
and   f2.year = 2017 
where  f1.year = 2016 
order by balance desc 
limit  5; 
; 

id | balance 
---- -------- 
2 3000 
3  100 
1 -1000 
+0

看上去非常簡單,比我想象的。謝謝! – eeetee

1

訣竅是將表加入自己。

SELECT y1.id, (y1.amount - y0.amount) AS improvement 
FROM yrtable AS y1 
JOIN yrtable AS y0 ON y0.id = y1.id 
WHERE y0.year = y1.year + 1 
    AND y0.amount > y1.amount 
ORDER BY (y1.amount - y0.amount)