Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Grupa MySQL według identyfikatora i ostatniej daty

Myślę, że dzięki poniższym możesz osiągnąć to, czego potrzebujesz. Operacje te są tak zwane „Maksymalne grupowe”.

Opcja 1

Jest to najłatwiejsze do zrozumienia, podzapytanie zwróci maksymalny TID dla wszystkich użytkowników od max jest używany razem z Group By a następnie wykonujemy inne zapytanie, aby uzyskać wszystkie dane dla tych identyfikatorów.

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

Opcja 2

Nieco bardziej skomplikowane do zrozumienia, ale najprawdopodobniej bardziej wydajne. Działa to na podstawie tego, że gdy t1.TViewedAt osiąga maksymalną wartość, nie ma t2.TViewedAt z większą wartością, a wartości wierszy t2 będą wynosić 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;

Wynik

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukiwanie geograficzne (odległość) w PHP/MySQL (wydajność)

  2. Wiele połączeń stołów w szynach

  3. Pobieranie i wyświetlanie danych dla każdego zarejestrowanego użytkownika w PHP za pomocą PDO

  4. przenieść tabelę z jednego schematu do innego schematu ?

  5. Zużycie pamięci PDO/MySQL z dużym zestawem wyników