SELECT ID_H,
ID_J,
COST,
RANK() OVER(PARTITION BY ID_J ORDER BY ID_H ASC) RNK,
ROW_NUMBER() OVER(PARTITION BY ID_J ORDER BY ID_H, ID_J) NUM
FROM MYTABLE
И если понадобится еще как-то ограничить выборку, по еще одному столбцу.. where col_name = "test" в какой момент вставлять, чтобы меньше обрабатывалось? дописывать в where через and?
SELECT A.ID_H,
SUM(COST) COST
FROM (SELECT ID_H,
ID_J,
COST,
RANK() OVER(PARTITION BY ID_J ORDER BY ID_H ASC) RNK,
ROW_NUMBER() OVER(PARTITION BY ID_J ORDER BY ID_H, ID_J) NUM
FROM MYTABLE
-- WHERE <Cюда вставить нужное условие>
) A WHERE A.RNK = 1
AND A.NUM = 1
GROUP BY A.ID_H
SELECT A.ID_H,
SUM(COST) COST
FROM (SELECT ID_H,
ID_J,
COST,
RANK() OVER(PARTITION BY ID_J ORDER BY ID_H ASC) RNK,
ROW_NUMBER() OVER(PARTITION BY ID_J ORDER BY ID_H, ID_J) NUM
FROM MYTABLE
) A WHERE A.RNK = 1
AND A.NUM = 1
GROUP BY A.ID_H
Если я правильно понял, то у тебя дубликаты в поле id.
1.Сделай бекап таблицы
2. Проверь строки которые будут удалены вот этим запросом
3. Если все норм, удали дубликаты
4. Создай уникальный индекс на поле id