sql >> Databasteknik >  >> RDS >> Mysql

MySQL Max-funktion blandar rader

Du behöver en GROUP BY sats med aggregatet MAX() . MySQL tillåter dig att utelämna det (där andra RDBMS skulle rapportera fel) men med obestämda resultat, som du ser. Detta kan hanteras genom att gå med i en underfråga som returnerar den grupperade rev enligt id .

SELECT 
  r.id,
  r.state,
  maxrev.rev
FROM
  VIEW_data r
  /* INNER JOIN against subquery which returns MAX(rev) per id only */
  JOIN (
    SELECT id, MAX(rev) AS rev
    FROM VIEW_data GROUP BY id
  /* JOIN is on both id and rev to pull the correct value for state */
  ) maxrev  ON r.id = maxrev.id AND r.rev = maxrev.rev
WHERE r.id = 1

http://sqlfiddle.com/#!2/4f651/8

Ovanstående returnerar max rev värde för valfritt id . Om du är säker du behöver bara den ena raden som filtrerats av WHERE satsen snarare än MAX() per grupp, titta på det andra svaret som använder ORDER BY &LIMIT .



  1. 3 sätt att kontrollera kolumndatatyp i Oracle

  2. Är det möjligt att använda användardefinierade aggregat (clr) med fönsterfunktioner (över)?

  3. Välj fråga med IN() och utan någon sortering

  4. Hur MINUTE() fungerar i MariaDB