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

MySQL Group podle ID a nejnovějšího data a času

Myslím si, že níže uvedeným způsobem můžete dosáhnout toho, co potřebujete. Tyto operace se nazývají „maximální skupinové maximum“.

Možnost 1

Toto je nejsnáze pochopitelné, poddotaz vrátí maximum TID pro všechny uživatele od max se používá společně s Group By a poté provedeme další dotaz, abychom získali všechna data pro tato ID.

 Select TID, TData, TUserID, TViewedAt
 From Test 
 Where TID In(
    Select Max(TID)
    From Test
    Group By TUserID
)

Možnost 2

Poněkud složitější na pochopení, ale s největší pravděpodobností efektivnější. Funguje to na základě toho, že když t1.TViewedAt je na maximální hodnotě, neexistuje žádný t2.TViewedAt s vyšší hodnotou a hodnoty t2 řádků budou NULL .

SELECT t1.TID, t1.TData, t1.TUserID, t1.TViewedAt
FROM Test t1
LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAt
WHERE t2.TUserID IS NULL;

Výsledek

TID TData   TUserID   TViewedAt
4   test3   123       2012-10-05 00:00:00.000
5   test2   213       2012-10-03 00:00:00.000


  1. Primární klíč pro zpracování Android Realm v relačním objektu

  2. přístup k aliasům sloupců v klauzuli where v postgresql

  3. Jak mohu importovat soubor .sql do mé databáze Heroku postgres?

  4. Brána PL/SQL v R11i