Нахождение некоторых одинаковых значений в каждом идентификаторе - PullRequest
0 голосов
/ 10 октября 2018

У меня есть данные такого типа, с идентификатором столбца, идентифицирующим потенциальные дубликаты, в этих данных тот же Id означает, что это один и тот же клиент, и я хочу показать, что учетная запись 456 не требуется, поскольку она покрыта по счету 123,Есть ли способ сделать это на SQL или таблицы?Я хочу показать все учетные записи, такие как 456. Идентификационная группа.

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Напишите запрос SQL, который выбирает минимальное значение Customer для каждого идентификатора.Присоедините этот набор данных к исходной таблице, где значение Customer в исходной таблице превышает минимальное значение для каждого соответствующего идентификатора.Вот пример SQLFiddle:

http://www.sqlfiddle.com/#!9/93296f/20

Вот DDL, использованный для воссоздания вашего вопроса:

CREATE TABLE Table1
(`Id` int, `Customer_Account` int, `City` varchar(9));

INSERT INTO Table1
(`Id`, `Customer_Account`, `City`)
VALUES
(1, 123, 'London'),
(1, 123, 'Paris'),
(1, 456, 'Paris'),
(1, 456, 'Mumbai'),
(1, 123, 'Mumbai'),
(1, 789, 'Singapore');

Вот DML, используемый для отображения дубликата CustomerСчета.Запрос 3 должен дать вам окончательные результаты.

-- Query 1: Find the First Account for each Customer
select `Id`, 
min(`Customer_Account`) as 'First Account by Customer' 
from Table1 group by `Id`;

-- Query 2: Find the First Account for Each Customer by City
select `Id`, 
min(`Customer_Account`) as 'First Account by City', 
`City` 
from Table1 
group by `Id`, `City`;

-- Query 3: Find the Duplicate Customer Accounts by ID
select distinct 
A.Id, 
A.Customer_Account as 'Duplicate Account by Customer', 
FirstAcctList.First_Account
from Table1 A 
join (
  select 
  `Id`, 
  min(`Customer_Account`) as 'First_Account' 
  from Table1 group by `Id`) as FirstAcctList
on FirstAcctList.First_Account <> A.Customer_Account;
0 голосов
/ 10 октября 2018
with cte as (
select min(customer_account) as account, id --This query will get the first account for each ID
from table
group by ID
 )
select customer_account, id --this will show, for each id, all the 'duplicated' customers
from table 
where customer_account not in (select account from cte)

результат должен быть:

456 1
789 1

Идентификатор только с одним идентификатором клиента не появится

...