MySQL “Group By” и “Order By”

Весь вывод журнала обрабатывается обработчиками; просто добавьте logging.StreamHandler() к корневому логгеру.

Вот пример настройки обработчика потока (с использованием stdout вместо значения по умолчанию stderr) и добавления его в корневой логгер:

import logging
import sys

root = logging.getLogger()
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)

92
задан dreftymac 28 June 2019 в 20:42
поделиться

2 ответа

В соответствии со стандартом SQL вы не можете использовать неагрегированные столбцы в списке выбора. MySQL допускает такое использование (если не используется режим ONLY_FULL_GROUP_BY), но результат непредсказуем.

ONLY_FULL_GROUP_BY

Вы должны сначала выбрать fromEmail, MIN (чтение), а затем во втором запросе (или подзапросе) - Subject.

21
ответ дан 24 November 2019 в 06:25
поделиться

Вот один из подходов:

SELECT cur.textID, cur.fromEmail, cur.subject, 
     cur.timestamp, cur.read
FROM incomingEmails cur
LEFT JOIN incomingEmails next
    on cur.fromEmail = next.fromEmail
    and cur.timestamp < next.timestamp
WHERE next.timestamp is null
and cur.toUserID = '$userID' 
ORDER BY LOWER(cur.fromEmail)

По сути, вы присоединяете таблицу к самой себе, ища более поздние строки. В предложении where вы указываете, что не может быть более поздних строк. Это дает вам только последнюю строку.

Если может быть несколько электронных писем с одной и той же меткой времени, этот запрос потребует уточнения. Если в таблице электронной почты есть столбец инкрементного идентификатора, измените СОЕДИНЕНИЕ, например:

LEFT JOIN incomingEmails next
    on cur.fromEmail = next.fromEmail
    and cur.id < next.id
42
ответ дан 24 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

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