Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL група по идентификатор и последна дата и час

Мисля, че с посоченото по-долу можете да постигнете това, от което се нуждаете. Тези операции са така наречените „Групови максимуми“.

Опция 1

Това е най-лесното за разбиране, подзаявка ще върне максимален TID за всички потребители след max се използва заедно с Group By и след това правим друга заявка, за да получим всички данни за тези идентификатори.

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

Вариант 2

Малко по-сложен за разбиране, но най-вероятно по-ефективен, Това работи на базата, че когато t1.TViewedAt е на максималната си стойност, няма t2.TViewedAt с по-голяма стойност и стойностите на t2 редове ще бъдат 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;

Резултат

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. Въпрос за задействане на MySQL:задейства се само при промяна на колона?

  2. крайните нули не влизат в базата данни

  3. Как да активирам mysql разширенията на php в контейнера за докер?

  4. Отдалечени връзки Mysql Ubuntu

  5. Как да принуди PHP да чете нови редове и връща като