Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql - ersten und letzten Datensatz nach Gruppentyp zusammenfügen?

Verwenden Sie die "funky" Funktionalität von mysql eines GROUP BY ohne Aggregieren der anderen Spalten, wodurch einfach die erste zurückgegeben wird Reihe der Gruppe. Das Problem wird dann, die Zeilen vorher in die richtige Reihenfolge zu bringen Verwendung dieser Funktionalität, typischerweise durch Verwendung einer Alias-Abfrage.

Dieser Ansatz vermeidet korrelierte Unterabfragen (Abfragen pro Zeile) und benötigt nur zwei Durchgänge über die Tabelle (einen für jede Richtung der Reihenfolge):

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;

Testcode:

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

Ausgabe:

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