můžete použijte GROUP BY
, ale je důležité pochopit, jak to funguje.
Když použijete GROUP BY
skupina řádků je sbalena do jednoho a to, co je zobrazeno v ostatních sloupcích, které nejsou použity ve vaší GROUP BY
klauzule, je určena buď pomocí agregačních funkcí, nebo jde o náhodný řádek mimo tuto skupinu. Nemůžete si být jisti, že získáte řádek odpovídající zobrazenému řádku s MAX()
hodnotu nebo jakoukoli agregační funkci, kterou jste použili. To je zvláště zřejmé, když zadáte dotaz jako:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
"jiný_sloupec" může patřit do řádku obsahujícího hodnotu MIN() nebo MAX() nebo dokonce do jiného řádku, který není zobrazen vůbec. V jiných RDBMS než MySQL je ve skutečnosti zakázáno vybírat sloupce, které nepoužívají agregační funkci nebo nejsou uvedeny v GROUP BY
klauzule, jen aby uživatelé neudělali chybu nebo si mysleli, že dosáhli správného výsledku.
Zdá se tedy, že ve vašem případě chcete zobrazit také sloupec „hodnota“. Z výše uvedených důvodů je odpověď juergen_d špatná, protože nevybírá "hodnotu", a pokud ano, nemůžete si být jisti, že je to správná "hodnota". Odpověď Filipe Silvy je špatná, protože seskupuje podle „hodnoty“. Tím se ve vašem případě ve skutečnosti vrátí celá tabulka. Romeshova odpověď je nesprávná, protože používá dvakrát MAX()
funkce vám dá maximální hodnoty, samozřejmě, ale ne hodnotu odpovídající hodnotě datetime.
Jak to tedy musíte udělat? Zde jsou popsány 3 způsoby . Naučte se je tím, že je sami aplikujete. Není to tak těžké :)