У меня небольшая проблема при попытке удалить несколько записей из моей базы данных, которые очень похожи, но не совсем одинаковы. Я посмотрел здесь и многие другие решения:
Удалить повторяющиеся записи в PostgreSQL
Как удалить дубликаты строк с помощью SQL?
Каждый раз, когда я пытаюсь удалить несколько дубликатов из таблицы, команда удаляет все записи, а не просто удаляет дубликаты.
Вот таблица с дубликатом выборки, где мы должны хранить только один уникальный hdrtime:
SELECT * from stdtextproducts where xxxid='DEN' AND nnnid='MTR' and hdrtime='270600';
cccid | datacrc | hdrtime | nnnid | site | wmoid | xxxid | bbbid | inserttime | product | reftime
-------+------------+---------+-------+------+--------+-------+-------+-------------------------+--------------------------------------------------------------------------+---------------
DEN | 3680361181 | 270600 | MTR | KDEN | SAUS70 | DEN | RRF | 2018-08-27 05:55:51.811 | SAUS70 KDEN 270600 RRF +| 1535349351811
| | | | | | | | | METAR KDEN 270553Z 22017KT 10SM BKN150 OVC200 23/06 A2991 RMK AO2 PK WND+|
| | | | | | | | | 22026/0456 SLP028 T02330056 10289 20222 58004 |
DEN | 1538417601 | 270600 | MTR | KDEN | SAUS70 | DEN | RRM | 2018-08-27 05:57:57.356 | SAUS70 KDEN 270600 RRM +| 1535349477356
| | | | | | | | | METAR KDEN 270553Z 22017KT 10SM BKN150 OVC200 23/06 A2991 RMK AO2 PK WND+|
| | | | | | | | | 22026/0456 SLP028 T02330056 10289 20222 58004 |
(2 rows)
Я пробовал следующее:
DELETE FROM stdtextproducts a USING (SELECT MIN(ctid) as ctid, hdrtime FROM stdtextproducts GROUP BY hdrtime HAVING COUNT(*) > 1) b WHERE a.hdrtime = b.hdrtime AND a.ctid <> b.ctid;
И следующее:
DELETE FROM stdtextproducts WHERE reftime NOT IN (SELECT MAX(reftime) FROM stdtextproducts GROUP BY hdrtime);
Я должен ожидать, что в списке появится только одна запись, но, похоже, ни одной записи больше нет.
SELECT * from stdtextproducts where xxxid='DEN' AND nnnid='MTR' and hdrtime='270600';
cccid | datacrc | hdrtime | nnnid | site | wmoid | xxxid | bbbid | inserttime | product | reftime
-------+---------+---------+-------+------+-------+-------+-------+------------+---------+---------
(0 rows)
Что мне здесь не хватает?
Заранее спасибо.