powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление дубликатов
4 сообщений из 4, страница 1 из 1
Удаление дубликатов
    #40045408
Wasteland Rebel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется следующая таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE analytics.google_analytic_report (
	account_login text NOT NULL,
	account_view_id text NOT NULL,
	report_date date NOT NULL,
	utm_marks text NOT NULL,
	metric_name text NOT NULL,
	metric_value numeric NULL,
	account_id int4 NOT NULL,
	CONSTRAINT google_analytic_report_pk PRIMARY KEY (account_view_id, account_id, report_date, utm_marks, metric_name)
);


В таблице начали появляться дубликаты из-за некорректного PRIMARY KEY. Хочу убрать account_id (потому что для аккаунтов могут быть одинаковые view_id, и статистика загружается дважды под разными id, хотя в этом нет никакого смысла) из PK, но для этого сначала необходимо удалить уже имеющиеся дубликаты.

Дубликаты искал следующим запросом:
Код: sql
1.
2.
3.
4.
select account_view_id, report_date, utm_marks, metric_name, count(*)
from analytics.google_analytic_report
group by account_view_id, report_date, utm_marks, metric_name
HAVING count(*) > 1


Собственно, мне необходимо удалить не все эти записи, а сделать так, чтобы у этих записей остался один экземпляр, при этом неважно, к какому account_id они будут привязаны.

Скрипт на удаление будет выглядеть примерно так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
DELETE FROM analytics.google_analytic_report t1
  USING      analytics.google_analytic_report t2
WHERE  t1.account_id    < t2.account_id
  AND  t1.account_view_id   = t2.account_view_id     
  AND  t1.report_date = t2.report_date
  AND  t1.utm_marks = t2.utm_marks
  AND  t1.metric_name = t2.metric_name;



Т.е. я должен весь primary key положить в условие where, а условие t1.account_id < t2.account_id нужно для того, чтобы как раз остался один набор? Я просто боюсь удалить лишнее.
...
Рейтинг: 0 / 0
Удаление дубликатов
    #40045493
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wasteland Rebel,

напишите селект - полный аналог делита и посмотрите что вернет
...
Рейтинг: 0 / 0
Удаление дубликатов
    #40046210
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delete from analytics.google_analytic_report where ctid not in
(
select min(ctid)
from analytics.google_analytic_report
group by account_view_id, report_date, utm_marks, metric_name
)
...
Рейтинг: 0 / 0
Удаление дубликатов
    #40046407
chatlanin44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда боишься удалить лишнее - сохрани дубли в таблицу
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление дубликатов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]