Вы хотите, чтобы все строки имели более одной даты на значение.Для этого вы можете использовать COUNT OVER
.
Один метод (по состоянию на Oracle 12c):
select id, value, date
from mytable
order by case when count(distinct date) over (partition by value) > 1 then 1 else 2 end
fetch first row with ties
Но вам придется поместить это в подзапрос (производная таблица / cte), если вы хотите отсортировать результат.
И еще один метод без предложения FETCH FIRST
(действует для Oracle 8i):
select id, value, date
from
(
select id, value, date, count(distinct date) over (partition by value) as cnt
from mytable
)
where cnt > 1
order by id, value, date;
Решение forpas с EXISTS
может быть быстрее, хоть.Ну, выбери какой метод тебе больше нравится: -)