2017-03-08 4 views
0

MySQL을 순전히 할 수 있는지 궁금합니다.행간 차이로 상위 5 개 결과 얻기

같은 데이터 포인트의 서로 다른 두 항목간에 가장 향상된 순서로 나열된 상위 5 목록입니다.

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

나는 기본적으로 2 이상 3 개선 이후는, 그 순서대로 23 반환해야합니다.

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) 
관련 문제