sql >> Databasteknik >  >> RDS >> Mysql

Får fel värden för andra kolumner när jag väljer MAX(updated_date)

Du behöver antingen en GROUP BY-sats eller en mer komplex fråga.

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

För exempeldata kommer detta att returnera 3 rader.

Mer troligt är att du vill:

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;

För exempeldata kommer detta att returnera 1 rad:

ta3   2012-03-11 11:05:56

Av de större DBMS är det bara MySQL som tillåter dig att utelämna GROUP BY-satsen när du har en blandning av aggregat och icke-aggregerade kolumner i urvalslistan. SQL-standarden kräver GROUP BY-satsen och du måste lista alla icke-aggregerade kolumner i den. Ibland, i MySQL, ger utelämnande av GROUP BY-satsen det svar du vill ha; så ofta som inte lyckas den dock ge ett oväntat svar.



  1. Maximalt antal poster i en MySQL-databastabell

  2. Throwback in datum utan helger

  3. Aggregatfunktioner är inte tillåtna i en rekursiv fråga. Finns det något alternativt sätt att skriva den här frågan?

  4. Slå samman två bord, sedan Beställ efter datum, MEN kombinera båda borden