sql >> Database teknologi >  >> RDS >> Mysql

mysql - slutte sig til første og sidste poster efter gruppetype?

Brug mysqls "funky" funktionalitet i en GROUP BY uden aggregering af de andre kolonner, hvilket blot returnerer den første række af gruppen. Problemet bliver så at få rækkerne i den rigtige rækkefølge før ved at bruge denne funktionalitet, typisk ved at bruge en aliasset forespørgsel.

Denne tilgang undgår korrelerede underforespørgsler (forespørgsler pr. række) og behøver kun to gange over tabellen (én for hver bestillingsretning):

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;
 

Testkode:

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');
 

Output:

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


  1. Er der nogen array-datatype i MySQL som i PostgreSQL?

  2. Hvordan genererer man næste automatiske stigningsnummer i mysql ved hjælp af php?

  3. Hvordan parametriserer jeg en nul-streng med DBNull.Value klart og hurtigt

  4. Valg af datointerval MySQL med dato_format