Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Finden der höchsten n Werte jeder Gruppe in MySQL

Siehe meine andere Antwort für die MySQL-only, aber sehr schnelle Lösung.

Mit dieser Lösung können Sie eine beliebige Anzahl oberster Zeilen pro Lane angeben und verwenden keine MySQL-„funky“-Syntax – sie sollte auf den meisten Datenbanken laufen.

select lane, series
from lane_series ls
group by lane, series
having (
    select count(*) 
    from lane_series
    where lane = ls.lane
    and series > ls.series) < 2 -- Here's where you specify the number of top rows
order by lane, series desc;

Testausgabe:

create table lane_series (lane int, series int);

insert into lane_series values 
(1, 680),
(1, 685),
(1, 688),
(2, 666),
(2, 425),
(2, 775);

select lane, series
from lane_series ls
group by lane, series
having (select count(*) from lane_series where lane = ls.lane and series > ls.series) < 2
order by lane, series desc;

+------+--------+
| lane | series |
+------+--------+
|    1 |    688 |
|    1 |    685 |
|    2 |    775 |
|    2 |    666 |
+------+--------+
4 rows in set (0.00 sec)