MySQL - возвращает неправильные строки с соответствующим значением notice_date [duplicate]

Вы должны использовать QODBC вместо QOCI.

31
задан Jonathan Leffler 12 June 2012 в 16:20
поделиться

6 ответов

Вы должны узнать последние значения timestamp в каждой группе (подзапрос), а затем присоединить этот подзапрос к таблице -

SELECT t1.* FROM messages t1
  JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
    ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
75
ответ дан Devart 25 August 2018 в 08:28
поделиться

Просто дополняя то, что сказал Деварт, ниже код не упорядочивается в соответствии с вопросом:

SELECT t1.* FROM messages t1
  JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
    ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;

Предложение GROUP BY должно быть в основном запросе, так как нам нужно сначала изменить порядок " SOURCE ", чтобы получить нужную« группировку »так:

SELECT t1.* FROM messages t1
  JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages ORDER BY timestamp DESC) t2
    ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp GROUP BY t2.timestamp;

С уважением,

1
ответ дан Bruno de Oliveira 25 August 2018 в 08:28
поделиться

Это стандартная проблема.

Обратите внимание, что MySQL позволяет опускать столбцы из предложения GROUP BY, чего нет в стандартном SQL, но вы не получаете детерминированных результатов вообще при использовании MySQL объект.

SELECT *
  FROM Messages AS M
  JOIN (SELECT To_ID, From_ID, MAX(TimeStamp) AS Most_Recent
          FROM Messages
         WHERE To_ID = 12345678
         GROUP BY From_ID
       ) AS R
    ON R.To_ID = M.To_ID AND R.From_ID = M.From_ID AND R.Most_Recent = M.TimeStamp
 WHERE M.To_ID = 12345678

Я добавил фильтр на To_ID, чтобы соответствовать тому, что у вас есть. Запрос будет работать без него, но будет возвращать гораздо больше данных в целом. Условие не обязательно должно указываться как вложенным запросом, так и внешним запросом (оптимизатор должен автоматически отключать условие), но он не может нанести вреда повторению условия, как показано.

1
ответ дан Jonathan Leffler 25 August 2018 в 08:28
поделиться

этот запрос возвращает последнюю запись для каждого Form_id:

    SELECT m1.*
     FROM messages m1 LEFT JOIN messages m2
     ON (m1.Form_id = m2.Form_id AND m1.id < m2.id)
     WHERE m2.id IS NULL;
2
ответ дан leyla azari 25 August 2018 в 08:28
поделиться

Вам нужно заказать их.

SELECT * FROM messages GROUP BY from_id ORDER BY timestamp DESC LIMIT 1

-4
ответ дан Marcus Recck 25 August 2018 в 08:28
поделиться

Попробуйте

SELECT * FROM messages where id in (SELECT max(id) FROM messages GROUP BY from_id ) order by id desc
13
ответ дан Venu M 25 August 2018 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: