+ version = уникальный ключ
key = индексный столбец
version = версия данных
value = сами данные
Как делать запрос с WHERE ... GROUP BY key, но чтобы в результатах учавствовали только строки с максимальными значениями поля version в пределах ключа key с учетом WHERE?
Например, если взять вот такие данные для примера:
1 1 10
1 2 20
1 3 30 #строка с максимальной версией для key=1
2 1 100
2 2 200 #строка с максимальной версией для key=2
то такой запрос должен выдать:
1 30
2 200
Group by не используют при таких раскладах, т.к. производительность будет в Ж... Делают оконными функциями или подзапросами в WHERE
я бы просто уникальный ключ даунгрейднул до просто key и обновлял по мере обновления самих данных
select key,argMax(value, version) from (select 1 as key, 1 as version, 10 as value union all select 1 ,2,20 union all select 1, 3, 30 union all select 2,1,100 union all select 2,1,200) group by key
Обсуждают сегодня