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

SQL:групиране от друга таблица и инвертиране на резултата

Много просто и бързо в PostgreSQL с DISTINCT ON - не е стандартен SQL, така че не е наличен във всяка RDBMS.

Въпросът не го споменава, но произлизайки от примерите за код, той всъщност търси реда с „последната дата“ за всеки получател за даден 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

Подробности, както и множество SQL стандартни алтернативи тук:
Избиране на първия ред във всяка група GROUP BY?

Друго решение с основен стандартен SQL. Работи с всяка голяма RDBMS, включително MySQL (тъй като този етикет е добавен):

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
   )

Само редът с най-новата дата преминава NOT EXISTS анти-полусъединяване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. какво повече мога да направя, за да се предпазя от XSS инжектиране и SQL инжектиране?

  2. критерии за хибернация, филтриране върху набор от стойности на enum

  3. Perl:Как да копирам/огледаме отдалечени MYSQL таблици в друга база данни? Вероятно и различна структура?

  4. ActiveRecord::ConnectionTimeoutError:не можа да получи връзка с база данни в рамките на 5 000 секунди (изчаква се 5 000 секунди)

  5. MySQL - Избор на колона, която не е в група по