Как я могу пронумеровать экземпляр повторяющейся записи?

У меня есть контакты, у которых один и тот же номер телефона указан несколько раз. Я хотел бы удалить все эти записи, кроме одной. У меня есть доступ только для чтения к базе данных, поэтому мне придется создать файл csv для удаления записей через интерфейс программы.

в файле csv я хотел бы пронумеровать экземпляр дубликата

Что-то вроде этого:

идентификатор Номер телефона Пример 1243 5555555555 1 1511 5555555555 2 1631 г. 5555555555 3 1131 5515551111 1

Я знаю, как показать количество записей, но я очень надеюсь вместо этого получить экземпляр.

Это мой код:

SELECT DISTINCT
  PS.PHONENUMBER.PHONENUMBER,
  PA1.PERSONPHONENUMBERASSOCID,
  PA1.PERSONID,
  PA1.ISPREFERRED,
  PA1.PHONENUMBERPRIORITYORDER
FROM
  PS.PHONENUMBER
  INNER JOIN PS.PERSONPHONENUMBERASSOC PA1 ON PA1.PHONENUMBERID = PS.PHONENUMBER.PHONENUMBERID
  INNER JOIN PS.PERSONPHONENUMBERASSOC PA2 ON PA1.PERSONID = PA2.PERSONID AND PA1.PHONENUMBERID = PA2.PHONENUMBERID AND PA1.PERSONPHONENUMBERASSOCID <> PA2.PERSONPHONENUMBERASSOCID
ORDER BY
  PA1.PERSONID,
  PA1.PHONENUMBERPRIORITYORDER

Какую СУБД вы используете? Пожалуйста, отметьте его, так как ответы могут существенно различаться в зависимости от вкуса. Пожалуйста, также отформатируйте свой код, чтобы он был более удобочитаемым для потенциальных ответов и других будущих посетителей этого вопроса.

esqew 27.06.2024 22:48

Почему id1631 получит экземпляр 2, но id1511 с меньшим номером получит экземпляр 3? Какова ваша логика заказа, чтобы добраться до этого заказа экземпляра?

JNevill 27.06.2024 22:59

Я ввел идентификатор случайным образом — просто как пример уникального номера с тем же номером телефона.

Scott Hansen 27.06.2024 23:03

Используйте ROW_NUMBER() в оконной функции.

NickW 27.06.2024 23:18

ROW_NUMBER() с предложением ORDER BY, которое определяет правила упорядочивания в случае конфликта.

Paul W 28.06.2024 00:55

Пожалуйста, отредактируйте вопрос и включите минимальный воспроизводимый пример с: утверждениями CREATE TABLE и INSERT для ваших выборочных данных (и PS.PHONENUMBER.PHONENUMBERID предполагает, что вам также может потребоваться включить утверждение CREATE TYPE); объяснение на английском языке логики, которую вы хотите реализовать для упорядочивания чисел, и того, как перейти от запроса с 5 столбцами к 3 столбцам в CSV; и ожидаемый результат для этого образца данных. На данный момент ваш запрос мало связан с данными, поэтому вопрос довольно запутанный.

MT0 28.06.2024 01:59

Это именно то, что мне было нужно. Большое спасибо!

Scott Hansen 28.06.2024 14:17
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
7
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
--    S a m p l e    D a t a :
Create Table PHONES AS
( Select 1131 "ID",     4515551111 "PHONE_NUMBER" From Dual Union All
  Select 1154,  4400051133  From Dual Union All
  Select 1214,  4400051133  From Dual Union All
  Select 1243,  5555555555  From Dual Union All
  Select 1511,  5555555555  From Dual Union All
  Select 1631,  5555555555  From Dual Union All
  Select 1965,  3333051133  From Dual 
);

Используйте одну из аналитических функций, как показано ниже (их 3 с одинаковым результатом), чтобы получить экземпляры. Главное — разбить по PHONE_NUMBER и упорядочить экземпляры по желаемому порядку — я сделал это по идентификатору — может быть что угодно:

--    S Q L :
Select    ID, PHONE_NUMBER,
          ROW_NUMBER() OVER(Partition By PHONE_NUMBER Order By ID) "INSTANCE_ROW_NUMBER",
          COUNT(ID) OVER(Partition By PHONE_NUMBER Order By ID) "INSTANCE_COUNT",
          SUM(1) OVER(Partition By PHONE_NUMBER Order By ID Rows Between Unbounded Preceding And Current Row) "INSTANCE_SUM_1"
From      PHONES
Order By  ID
/*      R e s u l t :
  ID  PHONE_NUMBER  INSTANCE_ROW_NUMBER INSTANCE_COUNT  INSTANCE_SUM_1
----  ------------  ------------------- --------------  --------------
1131    4515551111                    1              1               1
1154    4400051133                    1              1               1
1214    4400051133                    2              2               2
1243    5555555555                    1              1               1
1511    5555555555                    2              2               2
1631    5555555555                    3              3               3
1965    3333051133                    1              1               1    */

См. скрипку здесь.

Другие вопросы по теме