SQL получает самую последнюю запись каждого идентификатора потока - PullRequest
0 голосов
/ 09 октября 2018

Структура таблицы:

id | sender | receiver | subject | message | threadID | timestamp | date | readStatus

SELECT * FROM mail 
WHERE sender = 'redphyre' OR receiver = 'redphyre' 
AND threadID BETWEEN (select min(threadID) FROM mail WHERE sender = 'redphyre' OR receiver = 'redphyre' ORDER BY id DESC) 
AND (select max(threadID) FROM mail WHERE sender = 'redphyre' OR receiver = 'redphyre' ORDER BY id DESC) 
GROUP BY threadID;

Я пытаюсь получить это, чтобы получить самую последнюю запись для пользователя redphyre для каждого отдельного threadID в этомID потока 0,1,2.Но это не работает так.Вместо этого я получаю смешанные результаты между идентификаторами потоков.У кого-нибудь есть мысли?

1 Ответ

0 голосов
/ 09 октября 2018

Предположительно, это то, что вы хотите:

SELECT m.*
FROM mail m
WHERE 'redphyre' IN (m.sender, m.receiver) AND
      m.id = (SELECT MAX(m2.id)
              FROM mail m2
              WHERE 'redphyre' IN (m2.sender, m2.receiver) AND m2.threadID = m.threadID
             );

BETWEEN и GROUP BY действительно не имеют ничего общего с тем, что вы хотите.Подзапрос рассматривает все совпадающие записи в одном потоке и возвращает запись с наибольшим значением id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...