У меня есть две таблицы: типы событий таблицы и события таблицы с отношением один-ко-многим.Каждое событие имеет метку времени.Теперь я хотел бы получить SQL-запрос, который возвращает мне каждый тип события + соответствующее ему событие с последней отметкой времени (которая в этом случае может быть уникальной).
Я не совсем уверен, как это происходитПредполагается, что это будет сделано с SQL напрямую правильным способом.До сих пор я использовал что-то вроде этого:
select * from eventtypes left join
(
select events.* from events right join
(
select max(timestamp) as maxtimestamp from events groupby eventtypeid
) maxtimestamps
on events.timestamp = maxtimestamps.maxtimestamp
) lastevents
on eventtypes.id = lastevents.eventtypeid
(Простите за *. Это не производство, я просто написал это из своей головы) Эти два внутренних выбора всегда заставляли меня задуматься, неправильный путь.Я всегда думал, что должно быть что-то вроде этого:
select max(timestamp), corresponding(id), corresponding(name), ...
from events groupby eventtypeid
Я думаю, что функции, подобной соответствующей (), не существует.Зачем?Разве это не может быть реализовано быстрее на сервере sql, чем выполнение 2 select и соединение?Или есть другой способ сделать это эффективно в SQL?Или это уже эффективно?