Получите дубликат топ-1 набора из таблицы

Как получить дубликат топ-1 набора из списка

У меня есть таблица xyz ниже со следующими данными

Id  Name      Mobile           Email              
1   k1       900000001        [email protected]         
2   k2       900000001        [email protected]         
3   k1       900000000        [email protected]   
4   k2       900000001        [email protected] 
5   k1       900000000        [email protected]

Выход

Id      Name      Mobile           Email              
3       k1       900000000        [email protected]  
5       k1       900000000        [email protected]

В некоторых сценах данные могут быть такими, как показано ниже, без дубликатов.

Id      Name      Mobile           Email              
1       k1       900000000        [email protected]         
2       k2       900000001        [email protected] 

Выход не должен быть выходным

Проверяю, насколько я понимаю: вы ищете комбинацию (имя, мобильный телефон, адрес электронной почты), которая повторяется чаще всего, по крайней мере дважды?

Mureinik 21.06.2024 10:05

В моей таблице есть повторяющиеся записи набора (имя, мобильный телефон, адрес электронной почты). Требуется первый набор записей 1, если дубликатов нет, данные не должны отображаться. @Муреник

user3754858 21.06.2024 10:11
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
2
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже на «разворот» классики Получите по 1 верхнему ряду в каждой группе. Сначала получите строки, содержащие дубликаты, используя COUNT, а затем получите первую из этих строк, используя (DENSE_)RANK (вместо ROW_NUMBER):

CREATE TABLE dbo.YourTable (Id int,
                            Name char(2),
                            Mobile varchar(13),
                            Email nvarchar(50));

INSERT INTO dbo.YourTable
VALUES(1,'k1','900000000','[email protected]         '),
      (2,'k2','900000001','[email protected]         '),
      (3,'k1','900000000','[email protected]   '),
      (4,'k2','900000001','[email protected] '),
      (5,'k1','900000000','[email protected]');
GO

WITH C AS(
    SELECT Id,
           Name,
           Mobile,
           Email,
           COUNT(*) OVER (PARTITION BY Name) AS Cnt --Or perhaps (PARTITION BY Name, Mobile, Email) based on latest revision
    FROM dbo.YourTable),
R AS(
    SELECT Id,
           Name,
           Mobile,
           Email,
           RANK() OVER (ORDER BY Name) AS Rnk --Or perhaps (ORDER BY Name, Mobile, Email) based on latest revision
    FROM C
    WHERE Cnt > 1)
SELECT Id,
       Name,
       Mobile,
       Email
FROM R
WHERE Rnk = 1;
GO

DROP TABLE dbo.YourTable;
GO
    

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