sql >> Databáze >  >> RDS >> Mysql

mysql - připojit první a poslední záznam podle typu skupiny?

Použijte "funky" funkce mysql GROUP BY bez agregovat ostatní sloupce, což jednoduše vrátí první řada skupiny. Problémem pak je dostat řádky do správného pořadí před pomocí této funkce, obvykle pomocí dotazu s aliasem.

Tento přístup se vyhýbá jakýmkoli korelovaným poddotazům (dotazů na řádek) a potřebuje pouze dva průchody tabulkou (jeden pro každý směr řazení):

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;

Testovací kód:

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

Výstup:

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



  1. Jak propojit výtah a MySQL?

  2. PHP MySQL mysql_fetch_assoc s klíči pole odlišenými označením 'as'

  3. Oracle Fuzzy Search s mezerami

  4. Přečtěte si, jak vyladit výkon Microsoft SQL Server