sql >> Databáze >  >> RDS >> Mysql

Nalezení nejvyšších hodnot n každé skupiny v MySQL

Viz moje další odpověď na řešení pouze pro MySQL, ale velmi rychlé.

Toto řešení vám umožňuje zadat libovolný počet horních řádků na dráhu a nepoužívá žádnou „funky“ syntaxi MySQL – mělo by běžet na většině databází.

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;

Testovací výstup:

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)


  1. Jak zobrazit vložení vícerozměrných polí do tabulky MySQL?

  2. Jednoduchý rekurzivní dotaz v Oracle

  3. Problém s kódováním PDO UTF-8?

  4. SQL Server 2016:Zálohování databáze