Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdowanie najwyższych wartości n każdej grupy w MySQL

Zobacz moją inną odpowiedź dotyczącą rozwiązania tylko dla MySQL, ale bardzo szybkiego.

To rozwiązanie pozwala określić dowolną liczbę górnych wierszy na linię i nie używa żadnej "funky" składni MySQL - powinno działać w większości baz danych.

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;

Wyjście testowe:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwiększenie wartości w zapytaniu o aktualizację MySQL

  2. Sprawdzanie wartości w tablicy wewnątrz jednego zapytania SQL z klauzulą ​​WHERE

  3. Indeksy i wielokolumnowe klucze podstawowe

  4. mysql kolejność według liczby wydajności

  5. PDO i MySQL „pomiędzy”