sql >> Database >  >> RDS >> Mysql

Verkeerde waarden krijgen voor andere kolommen wanneer ik MAX (updated_date) selecteer

Je hebt ofwel een GROUP BY-clausule nodig of een complexere zoekopdracht.

SELECT field1, MAX(updated_date)
  FROM mytable
 GROUP BY field1

Voor de voorbeeldgegevens levert dit 3 rijen op.

Waarschijnlijker wil je:

SELECT t1.field1, t3.max_date
  FROM mytable AS t1
  JOIN (SELECT MAX(t2.updated_date) AS max_date
          FROM mytable AS t2
       ) AS t3
    ON t1.updated_date = t3.max_date;

Voor de voorbeeldgegevens levert dit 1 rij op:

ta3   2012-03-11 11:05:56

Van de belangrijkste DBMS kunt u alleen met MySQL de GROUP BY-component weglaten wanneer u een combinatie van aggregaten en niet-geaggregeerde kolommen in de selectielijst heeft. De SQL-standaard vereist de GROUP BY-component en u moet alle niet-geaggregeerde kolommen erin vermelden. Soms levert het weglaten van de GROUP BY-component in MySQL het gewenste antwoord op; zo vaak als niet, slaagt het er echter in om een ​​onverwacht antwoord te geven.



  1. Verplaats SQL-gegevens van de ene tabel naar de andere

  2. PLSQL-lus door JSON-object

  3. Relatie met velen en krijg zonder dit

  4. Hoe kan ik in Postgresql verifiëren dat JSON geldig is?