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

SQL:pogrupuj według z innej tabeli i odwróć wynik

Bardzo prosty i szybki w PostgreSQL z DISTINCT ON - nie standardowy SQL, więc nie jest dostępny w każdym RDBMS.

Pytanie nie wspomina o tym, ale wywodząc się z przykładów kodu, faktycznie szuka wiersza z "ostatnią datą" dla każdego odbiorcy dla danego author .

SELECT DISTINCT ON (r.recipient)  m.*
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
ORDER  BY r.recipient, m.date DESC, r.m_id -- to break ties

Szczegóły, a także wiele standardowych alternatyw SQL tutaj:
Wybrać pierwszy wiersz w każdej grupie GROUP BY?

Kolejne rozwiązanie z podstawowym, standardowym SQL. Działa z każdym głównym RDBMS, w tym MySQL (odkąd ten tag został dodany):

SELECT m.* 
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
AND NOT EXISTS (
   SELECT 1
   FROM   message   m1
   JOIN   recipient r1 ON r1.m_id = m1.id
   WHERE  r1.recipient = r.recipient 
   AND    m1.author = 1
   AND    m1.date > m.date
   )

Tylko wiersz z najnowszą datą przechodzi NOT EXISTS anty-semi-join.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ręcznie zarejestrować niestandardowe funkcje SQL w aplikacji Spring Boot?

  2. jak wybrać wiersz, w którym jedna z kilku kolumn ma określoną wartość?

  3. Czy są jakieś dobre implementacje CachedRowSet inne niż zastrzeżona Sun?

  4. Złożone zapytanie php mysqli do wstawiania danych, jeśli nie istnieją:uzyskiwanie zduplikowanej nazwy kolumny '?'

  5. Alternatywne sposoby na uniknięcie limitu geokodów w Mapach Google