sql >> Databasteknik >  >> RDS >> Mysql

MySQL få senaste datumposter från flera

Du kan använd GROUP BY , men det är viktigt att förstå hur det fungerar.

När du använder GROUP BY en grupp rader komprimeras till en och det som visas i de andra kolumnerna som inte används i din GROUP BY sats, bestäms antingen genom att använda aggregerade funktioner eller så är det en slumpmässig rad ur den gruppen. Du kan inte vara säker på att få raden som motsvarar raden som visas med MAX() värde eller vilken aggregerad funktion du använde. Detta blir särskilt uppenbart när du gör en fråga som:

SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id

"another_column" kan tillhöra raden som innehåller MIN()-värdet eller MAX()-värdet eller till och med till en annan rad som inte visas alls. I andra RDBMS än MySQL är det faktiskt förbjudet att välja kolumner som inte använder en aggregatfunktion eller som inte är listade i GROUP BY klausul, bara för att förhindra att användare gör ett misstag eller tror att de fick rätt resultat.

Så i ditt fall verkar du vilja visa kolumnen "värde" också. Av ovanstående skäl är juergen_ds svar fel, eftersom det inte väljer "värde", och om det skulle göra det kan du inte vara säker på att det är rätt "värde". Filipe Silvas svar är fel, eftersom det grupperar efter "värde". Om du gör detta kommer i ditt fall faktiskt att returnera hela tabellen. Romeshs svar är fel, eftersom två gånger MAX() används funktionen ger dig maxvärdena, uppenbarligen men inte värdet som motsvarar datetime-värdet.

Så, hur måste du göra det? Här beskrivs tre sätt . Lär dig dem genom att tillämpa dem själv. Det är inte så svårt :)



  1. Postgres-operatörer för JSON-datatyp med Rails 4

  2. Oracle - fler frågor i ett resultat

  3. Hur man går igenom datagridview 1 och kopierar loopresultat till datagridview2 i en annan form och DB-tabell

  4. VÄLJ underfråga med WHERE-villkor i Yii2 find() / QueryBuilder