У меня есть следующие таблицы:
Task (id, ....)
TaskPlan (id, task_id, ......., end_at)
Обратите внимание, что end_at - это отметка времени и что у одной Задачи есть много TaskPlans.Мне нужно запросить MAX end_at
для каждой задачи.
Этот запрос работает нормально, за исключением случаев, когда у вас есть одинаковая точная временная метка для разных TaskPlan.В этом случае мне будет возвращено несколько TaskPlan с MAX end_at
для одной и той же задачи.
Я знаю, что это маловероятная ситуация, но в любом случае я могу ограничить количество результатов для каждого task_id до1?
Мой текущий код:
SELECT * FROM Task AS t
INNER JOIN (
SELECT * FROM TaskPlan WHERE end_at in (SELECT MAX(end_at) FROM TaskPlan GROUP BY task_id )
) AS pt
ON pt.task_id = t.id
WHERE status = 'plan';
Как это можно сделать, кроме как в описанной выше ситуации?Также в подзапросе instad SELECT MAX(end_at) FROM TaskPlan GROUP BY task_id
возможно ли сделать что-то подобное, чтобы я мог использовать TaskPlan.id для предложения where in
?
SELECT id, MAX(end_at) FROM TaskPlan GROUP BY task_id
Когда я пытаюсь, он дает следующееошибка:
Ошибка SQL [1055] [42000]: выражение # 1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец «TaskPlan.id», который функционально не зависит от столбцов в GROUPПункт BY;это несовместимо с sql_mode = only_full_group_by
Любые объяснения и предложения приветствуются!
Примечание на дублирующем ярлыке: (Теперь вновь открыто)
Я уже изучил этот вопрос , но он не дает ответа для моей ситуации, когда в результате есть несколько максимальных значений, и это необходимобыть отфильтрован, чтобы включить только одну строку результатов на группу