2017-03-08 2 views
0

Ich frage mich, ob dies auch nur mit MySQL möglich ist.Get Top 5 Ergebnisse nach Differenz zwischen den Zeilen

Eine Top-5-Liste, die als am meisten verbessert zwischen zwei verschiedenen Einträgen desselben Datenpunkts geordnet ist.

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

Ich brauche es im Wesentlichen die 2 und 3, in dieser Reihenfolge zurückzukehren, da 2 mehr als 3 verbessert.

1 sollte kein Ergebnis sein, da es zwischen Jahren nicht verbessert hat.

Antwort

2

es hier ansehen: 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

Sieht so viel einfacher, als ich es mir vorgestellt. Vielen Dank! – eeetee

1

Der Trick besteht darin, die Tabelle mit sich selbst zu verbinden.

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) 
Verwandte Themen