sql >> Databáze >  >> RDS >> Mysql

MySQL získá poslední záznamy z více dat

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é :)



  1. Pole rails, které je polem objektů JSON?

  2. Nejrychlejší metoda pro SQL Server vkládá, aktualizuje, vybírá

  3. Proč mysqli vydává příkazy mimo synchronizaci?

  4. Více vztahů ke stejnému modelu CakePHP