sql >> Database teknologi >  >> RDS >> Mysql

MySQL Max-funktion blande rækker

Du skal bruge en GROUP BY klausul med den samlede MAX() . MySQL tillader dig at udelade det (hvor andre RDBMS ville rapportere fejl), men med ubestemte resultater, som du ser. Dette kan håndteres ved at joine en underforespørgsel, som returnerer den grupperede rev efter 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

Ovenstående vil returnere maks. rev værdi for enhver id . Hvis du er sikker du behøver kun den ene række som filtreret af WHERE klausul i stedet for MAX() pr. gruppe, se på det andet svar, som gør brug af ORDER BY &LIMIT .



  1. Filtrer null eller tom input ved hjælp af LOAD DATA INFILE i MySQL

  2. SUBSTR() Funktion i Oracle

  3. Lagring af billeder i bytea-felter i en PostgreSQL-database

  4. Sådan fungerer CHR() i MariaDB