Чтобы суммировать комментарии, вам нужны строки 'ABC', в которых нет соответствующей строки 'MIS' (на основе комбинации бренда / часа / типа);плюс строки «MIS», которые также имеют совпадающую «ABC», но с измененным кодом на «ABC» ...
Вы можете объединить два запроса, чтобы получить эти подмножества строк:
select value
, brand
, hour
, code
, type
from table_1 t1
where code = 'ABC'
and not exists (
select *
from table_1 t1_sub
where t1_sub.brand = t1.brand
and t1_sub.hour = t1.hour
and t1_sub.type = t1.type
and t1_sub.code = 'MIS'
)
union all
select value
, brand
, hour
, 'ABC'
, type
from table_1 t1
where code = 'MIS'
and exists (
select *
from table_1 t1_sub
where t1_sub.brand = t1.brand
and t1_sub.hour = t1.hour
and t1_sub.type = t1.type
and t1_sub.code = 'ABC'
);
VALUE BRAND HOUR CODE TYPE
---------- ----- ------------------- ---- ----
12 G 2018-10-16 02:00:00 ABC A
G 2018-10-16 01:00:00 ABC A
B 2018-10-16 01:00:00 ABC B
или вторая ветвь предположительно может быть упрощена, если для каждого MIS всегда должен быть соответствующий «ABC»:
select value
, brand
, hour
, code
, type
from table_1 t1
where code = 'ABC'
and not exists (
select *
from table_1 t1_sub
where t1_sub.brand = t1.brand
and t1_sub.hour = t1.hour
and t1_sub.type = t1.type
and t1_sub.code = 'MIS'
)
union all
select value
, brand
, hour
, 'ABC'
, type
from table_1 t1
where code = 'MIS';
VALUE BRAND HOUR CODE TYPE
---------- ----- ------------------- ---- ----
12 G 2018-10-16 02:00:00 ABC A
G 2018-10-16 01:00:00 ABC A
B 2018-10-16 01:00:00 ABC B
Вы также можете сделать это одним ударом по столу.используя аналитические функции различными способами;это только один пример, в котором нулевое значение имеет приоритет над ненулевым:
select value
, brand
, hour
, code
, type
from (
select value
, brand
, hour
, 'ABC' as code
, type
, row_number() over (partition by brand, hour, type order by value nulls first) as rn
from table_1
)
where rn = 1;
VALUE BRAND HOUR CODE TYPE
---------- ----- ------------------- ---- ----
B 2018-10-16 01:00:00 ABC B
G 2018-10-16 01:00:00 ABC A
12 G 2018-10-16 02:00:00 ABC A