Я пишу сложный запрос MySQL и не могу понять, как его завершить.
Вот часть, которая доставляет мне неприятности (это только часть моего запроса):
SELECT * FROM table AS t1
WHERE date < (
SELECT date FROM table AS t2
WHERE phase="B" AND t2.target = t1.target
)
По сути, у меня есть предметы, у каждого из которых есть дата, фаза (A, B, C) и цель. Для цели есть несколько предметов типа A, затем один и необязательный предмет типа B, затем предметы с типом C.
Для каждой цели я хочу выбрать все строки, соответствующие следующим условиям:
- Если есть элемент с фазой «B» (давайте назовем его itemX ), я хочу вернуть все элементы с датой ниже даты itemX
- Если нет элемента с фазой "B", я хочу вернуть все строки
Параметр даты очень важен. В большинстве случаев эти 3 фазы различны и не могут перекрываться, но в некоторых случаях это происходит.
Проблема здесь в том, что мой подзапрос не возвращает ни одной строки в случае 1, а одну ячейку в случае 2.
Если мы находимся в случае 1, все условие WHERE date < (...)
не имеет значения и не должно применяться в запросе.
Я перепробовал несколько вариантов с IFNULL
и EXISTS
, но я думаю, что сделал это неправильно, потому что у меня продолжают появляться ошибки синтаксиса.