Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql - joindre les premier et dernier enregistrements par type de groupe ?

Utilisez la fonctionnalité "funky" de mysql d'un GROUP BY sans l'agrégation des autres colonnes, qui renvoie simplement la première ligne du groupe. Le problème devient alors de mettre les lignes dans le bon ordre avant en utilisant cette fonctionnalité, généralement en utilisant une requête avec alias.

Cette approche évite toute sous-requête corrélée (requêtes par ligne) et ne nécessite que deux passages sur la table (un pour chaque sens de classement) :

select x2.type, x2.dat as first_dat, y2.dat as last_dat
from (select *
  from (select type, dat
    from so8735514
    order by 1, 2) x1
  group by 1) x2
join (select *
  from (select type, dat
    from so8735514
    order by 1, 2 desc) y1
  group by 1) y2 on y2.type = x2.type;

Code d'essai :

create table so8735514 (idx int, type text, dat text);
insert into so8735514 values
(0, 'a', 'foo1'),
(1, 'b', 'foo2'),
(2, 'c', 'foo3'),
(3, 'a', 'foo4'),
(4, 'b', 'foo5'),
(5, 'c', 'foo6'),
(6, 'a', 'foo7'),
(7, 'b', 'foo8'),
(8, 'c', 'foo9');

Sortie :

+------+-----------+----------+
| type | first_dat | last_dat |
+------+-----------+----------+
| a    | foo1      | foo7     |
| b    | foo2      | foo8     |
| c    | foo3      | foo9     |
+------+-----------+----------+