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

MySQL:Vyberte N řádků, ale pouze s jedinečnými hodnotami v jednom sloupci

Pravděpodobně to není nejelegantnější řešení a výkon IN může trpět na větších stolech.

Vnořený dotaz získá minimální Birthyear pro každé město. Pouze záznamy, které mají tento Birthyear se shodují ve vnějším dotazu. Seřazením podle věku a omezením na 3 výsledky získáte 3 nejstarší lidi, kteří jsou zároveň nejstaršími ve svém městě (Egon Spengler odpadá..)

SELECT Name, City, Birthyear, COUNT(*) AS ct
FROM table
WHERE Birthyear IN (SELECT MIN(Birthyear)
               FROM table
               GROUP by City)
GROUP BY City
ORDER BY Birthyear DESC LIMIT 3;

+-----------------+-------------+------+----+
| name            | city        | year | ct |
+-----------------+-------------+------+----+
| Henry Jones     | Chicago     | 1899 | 1  |
| Mac Taylor      | New York    | 1955 | 1  |
| Sarah Connor    | Los Angeles | 1959 | 1  |
+-----------------+-------------+------+----+

Upravit - přidáno GROUP BY City na vnější dotaz, protože lidé se stejným rokem narození by vrátili více hodnot. Seskupení na vnějším dotazu zajišťuje, že bude vrácen pouze jeden výsledek na město, pokud má více než jedna osoba minimální Birthyear . ct se zobrazí, zda ve městě existuje více než jedna osoba s daným Birthyear



  1. Už žádné SPU

  2. Převést Unixtime na Datetime SQL (Oracle)

  3. Datové sklady Profilování dat ETL pomocí Oracle Warehouse Builder

  4. Tabulka popisu SQLite