sql >> Database >  >> RDS >> Mysql

SQL:hoe de rijenvolgorde te behouden met DISTINCT?

de distinct sleutelwoord doet wat het moet doen, retourneer elk een rij met een bepaalde kolomwaarde. Met Distinct kunt u niet specificeren welke zo'n rij wordt geretourneerd, en het is duidelijk uit de oorspronkelijke zoekopdracht dat een dergelijke volgorde is toegestaan ​​(er is een rij met id 443 die volgt op een rij met id 429).

Om te bepalen welke rijen worden geretourneerd, moet u de query opnieuw formuleren. Een typische oplossing die ik zal nemen is het gebruik van een group by , het selecteren van de groepskolom en de gewenste rij uit elke groep, iets in de trant van

SELECT message.id, MAX(message.created_at) FROM message GROUP BY message.id;

Als ik meer moet doen, gebruik ik dit soort zoekopdracht als een subselectie in een grotere zoekopdracht, eventueel in het id-veld om meer velden uit de gewenste rij te krijgen, of om de zoekopdracht op een bepaalde manier te ordenen.




  1. Databasemodellering voor een zwakke entiteit

  2. Op welke kolom moet de geclusterde index worden geplaatst?

  3. Hoe rijen te ordenen op groepssom in SQL

  4. Fix 'De applicatie "SQLDeveloper.app" kan niet worden geopend.'