Я использую базу данных ошибок Mantis (которая использует MySQL), и я хочу запросить, какие ошибки изменили их степень серьезности в течение последних 2 недель, однако только последнее изменение серьезности ошибка должна быть указана.MySQL: нежелательный результат с максимальной функцией на отметке времени
Проблема заключается в том, что я получаю несколько записей на каждый идентификатор ошибки (который является основным ключом), что не является моим желаемым результатом, так как я хочу иметь только последнее изменение за ошибку. Это означает, что каким-то образом я использую функцию max, а группу - неправомерно.
Здесь вы можете увидеть мой запрос:
SELECT `bug_id`,
max(date_format(from_unixtime(`mantis_bug_history_table`.`date_modified`),'%Y-%m-%d %h:%i:%s')) AS `Severity_changed`,
`mantis_bug_history_table`.`old_value`,
`mantis_bug_history_table`.`new_value`
from `prepared_bug_list`
join `mantis_bug_history_table` on `prepared_bug_list`.`bug_id` = `mantis_bug_history_table`.`bug_id`
where (`mantis_bug_history_table`.`field_name` like 'severity')
group by `bug_id`,`old_value`,`.`new_value`
having (`Severity_modified` >= (now() - interval 2 week))
order by bug_id` ASC
Для ошибки с идентификатором 8, например, я получаю три записи с этим запросом. Ошибка с идентификатором 8 действительно имела три изменения серьезности за последние 2 недели, но я хочу только получить самую последнюю степень серьезности.
В чем может быть проблема с моим запросом?
Спасибо за ваш быстрый ответ, однако я не понимаю, как присоединился к подзапрос (getLatest) поможет. Предел 1 говорит, что я получу только одну строку для всего запроса (это только одна ошибка, для которой я вижу результаты). Я думаю, что ваше намерение с помощью подзапроса состояло в том, чтобы получить последний результат за каждый баг, отсортировав дату в порядке убывания (который ставит последние в верхней части) и предел его с 1 результатом за ошибку, но он не работает так, как вы предполагали , –
@Bruder - У меня нет доступа к вашей БД, поэтому я не могу отлаживать свой запрос, кроме как просто сгладить его. Вы можете устранить неполадки, просто вытащив подзапрос и посмотрев, что он получит. Возможно, в ваших данных была действительно одна ошибка за последние две недели? Удачи! (Или вы можете поместить свои данные и таблицу на SqlFiddle.com, и я могу продолжить отладку моего запроса.) – leeyuiwah
Нет, в течение последних 2 недель имеется несколько записей для нескольких ошибок. Но для всех этих ошибок я хотел получить последнюю запись для каждой ошибки. Подзапрос, который вы предположили, не работает в моем случае. –