sql >> Database >  >> RDS >> Mysql

mysql - voeg eerste en laatste records toe op groepstype?

Gebruik mysql's "funky" functionaliteit van een GROUP BY zonder het aggregeren van de andere kolommen, die eenvoudig de eerste . retourneert rij van de groep. Het probleem wordt dan om de rijen in de juiste volgorde te krijgen voor met behulp van deze functionaliteit, meestal met behulp van een alias-query.

Deze aanpak vermijdt gecorreleerde subquery's (query's per rij) en hoeft slechts twee keer over de tafel te gaan (één voor elke volgorde van bestellen):

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

Uitgang:

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



  1. Waarom wordt er maar één resultaat van mijn zoekopdracht weergegeven?

  2. django hoe modellen te definiëren voor bestaande veel tot veel tabellen in de postgresql-database

  3. Hoe voer ik een samengevoegde query uit in de ZF-tabelleninterface?

  4. Oracle SQL - Genereer geaggregeerde rijen voor bepaalde rijen met select