Каждый раз, когда вы видите что-то вроде «только для типа события 301», вы должны ожидать того же ограничения либо в предложении where, либо в условии has («Имея» - это, в основном, предложение where для результатов операции «»group by ").
Итак, сказав, вы могли бы начать с чего-то, как показано ниже, и использовать обратные слова.WHERE EVENT_TYPE = 301;
Затем вы можете заполнить некоторые основы, например таблицу, в которой находится поле, например, SELECT * FROM EVERE, где EVENT_TYPE = 301;
Теперь вы можете начать думать о группировании похожихсобытия в соответствии с PROJECT_ID.Для простоты мы просто будем использовать PROJECT_FK, поскольку он эквивалентен PROJECT.PROJECT_ID.ВЫБЕРИТЕ PROJECT_FK ИЗ МЕРОПРИЯТИЯ, ГДЕ EVENT_TYPE = 301 GROUP BY PROJECT_FK;
Теперь все PROJECT_FK в таблице EVENT сгруппированы вместе, но у нас нет никакой информации.Мы ищем детали одного события, чтобы мы могли выбрать только один EVENT_ID, когда их несколько.MIN () и MAX () будут работать для этого.Таким образом, вы можете написать: SELECT PROJECT_FK, MIN (EVENT_ID) FROM EVENT WHERE EVENT_TYPE = 301 GROUP BY PROJECT_FK;
Приведенный выше запрос дал нам по одному событию для каждого PROJECT_FK в таблице EVENT, но ни одна из других подробностей события,Давайте объединим приведенный выше результат с таблицей EVENT, и мы находимся на пути к нашему ответу.Поэтому ВЫБЕРИТЕ table2. * ИЗ СОБЫТИЯ table1 ПРИСОЕДИНЯЙТЕСЬ (ВЫБЕРИТЕ PROJECT_FK, MIN (EVENT_ID) ОТ СОБЫТИЯ ГДЕ EVENT_TYPE = 301 GROUP BY PROJECT_FK) table2 ONтаблица ПРОЕКТ.Всякий раз, когда вы видите «пустые / пустые значения должны быть возвращены в полях событий», вы должны думать о внешнем соединении.Таким образом, вы можете просто продолжать объединять таблицы, чтобы получить желаемый результат.Например, SELECT * FROM PROJECT LEFT OUTER JOIN (SELECT table2. * FROM EVENT table1 JOIN (SELECT PROJECT_FK, MIN (EVENT_ID) FROM EVENT WHERE EVENT_TYPE = 301 GROUP BY PROJECT_FK) table2 ON table1.PROJECT_FK = table2.PROJECT_FK =) ONPROJECT_FK;