[SQL] select distinct niet bruikbaar - alternatief?

Pagina: 1
Acties:

  • reyan
  • Registratie: November 2003
  • Laatst online: 17-12-2021
Ik zit met een probleempje bij het opstellen van een query. Ik heb een (grote) tabel met een id-kolom (oplopende integer), een product_type-kolom (varchar(20) die meermaals voorkomt in de kolom) en een berg kolommen met data die nu niet terzake doen.

Ik zou nu graag de laatste 20 producten uit de tabel zien, gesorteerd van nieuw naar oud (hoger id is nieuwer product). Simpel denk je (dat is het waarschijnlijk ook, maar ik zie het niet :))?
code:
1
SELECT product_type, id FROM mytable ORDER BY id DESC LIMIT 20
Dat geeft de laatste 20 rijen uit de tabel, maar dat heb ik niet nodig. Ik wil de laatste 20 producten: er kunnen dus tal van dubbelen tussenzitten. Ik zou dus hetvolgende willen doen:
code:
1
SELECT DISTINCT product_type FROM mytable ORDER BY id DESC LIMIT 20
maar dat is voor PostgreSQL geen geldige syntax. De id waarop we sorteren moet eveens in de SELECT staan. Dus:
code:
1
SELECT DISTINCT product_type, id FROM mytable ORDER BY id DESC LIMIT 20
Maar nu werkt de DISTINCT niet meer omdat alle rijen uniek zijn door de id...

Ik heb al zitten experimeteren met COUNT en subqueries, maar of het is niet mogelijk (twijfelachtig) of ik zie het gewoonweg niet. Iemand die me hierbij wat hulp kan geven?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En zoiets?
SQL:
1
2
SELECT product_type, MAX(id) as id FROM 
mytable GROUP BY product_type ORDER BY id DESC LIMIT 20


Evt kan je MIN(id) nemen omdat je wellicht juist de eerste keer dat iets voorkwam wil gebruiken. Performance-wise is dit trouwens wel minder dan je eigen distinct-query zou moeten zijn.

  • reyan
  • Registratie: November 2003
  • Laatst online: 17-12-2021
Dat werkt inderdaad wel! Bedankt alvast!