Я бы использовал это:
select t.*
from test as t
join
(select max(rev) as rev
from test
group by id) as o
on o.rev = t.rev
Подзапрос SELECT не слишком эффективен, но в предложении JOIN кажется полезным. Я не эксперт в оптимизации запросов, но я пробовал в MySQL, PostgreSQL, FireBird, и он работает очень хорошо.
Вы можете использовать эту схему в нескольких соединениях и с предложением WHERE. Это мой рабочий пример (решение идентично вашей задаче с таблицей «твердое»):
select *
from platnosci as p
join firmy as f
on p.id_rel_firmy = f.id_rel
join (select max(id_obj) as id_obj
from firmy
group by id_rel) as o
on o.id_obj = f.id_obj and p.od > '2014-03-01'
Его спрашивают на таблицах с подростками таких записей записей, и он занимает менее 0,01 секунды на самом деле не слишком сильная машина.
Я бы не использовал пункт IN (как упоминается выше). IN предоставляется для использования с короткими списками констант, а не как фильтр запросов, построенный на подзапросе. Это связано с тем, что подзапрос в IN выполняется для каждой отсканированной записи, которая может сделать запрос очень медленным.
Private Event MyEvent()
Private delegates() As System.Delegate = MyEventEvent.GetInvocationList()
недокументирован, найден здесь
, если вы посмотрите на это Как присоединить события исходного объекта к глубоко скопированному клону У меня есть пример кода о том, как получить делегат для события через отражение. Насколько я знаю, это единственный способ сделать это в VB.