SELECT id FROM (SELECT id, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS row_num FROM dle_post) t WHERE row_num > 1;
DELETE FROM dle_post
WHERE id IN (SELECT id FROM (SELECT id, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS row_num FROM dle_post) t WHERE row_num > 1);
CREATE UNIQUE INDEX dle_post_id_unq ON dle_post(id);
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