sql >> Databasteknik >  >> RDS >> Mysql

mysql - gå med i första och sista poster efter grupptyp?

Använd mysqls "funky" funktionalitet i en GROUP BY utan aggregerar de andra kolumnerna, vilket helt enkelt returnerar den första rad i gruppen. Problemet blir då att få raderna i rätt ordning före använder den här funktionen, vanligtvis genom att använda en aliasfråga.

Detta tillvägagångssätt undviker alla korrelerade underfrågor (frågor per rad) och behöver bara två omgångar över tabellen (en för varje ordningsriktning):

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;

Testkod:

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

Utdata:

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



  1. Skapa och använd temptabell i kapslade frågor

  2. PostgreSQL byt namn på attribut i jsonb-fältet

  3. Försöker bygga en statisk databasklass som jag kan komma åt från vilken funktion som helst utanför klassen

  4. XML platt fil kontra relationsdatabas backend