У меня есть набор данных, в котором несколько человек появляются несколько раз с одним и тем же именем и SSN, но с разными идентификаторами. Я хочу удалить тех людей и оставить только тех, кто появляется один раз.
declare @t table(personid int, first_name varchar(50), last_name varchar(50), ssn int)
insert into @t
values(1, 'Roman', 'Smith', 12),
(2, 'John', 'Thomas', 15),
(3, 'John', 'Thomas', 15)
В этом случае я только хочу вернуть Романа Смита и полностью уничтожить Джона Томаса.
Я играл с Window Functions, и мне удалось продвинуться так далеко:
select * from
(
select person_id, first_name, last_name, middle_initial, ssn,
row_number() over(partition by ssn, first_name, last_name, middle_initial order by person_id) as
rn
from t_person
where person_id in (1, 2, 3)
)a
where rn = 1
4 ответа
В этом сценарии мне нравится использовать НЕ СУЩЕСТВУЕТ. Простой способ выполнить устранение.
SELECT *
FROM @t AS T
WHERE NOT EXISTS (SELECT 1 FROM @t WHERE ssn = T.ssn GROUP BY ssn HAVING COUNT(*) > 1)
Вы можете использовать оператор «LIKE», чтобы получить все имена, которые соответствуют заданному шаблону, и полностью удалить их из вашей базы данных.
DELETE FROM name таблицы
ГДЕ first_name НРАВИТСЯ '% $ name%'
Это удалит все экземпляры данного «имени», однако это можно использовать, только если у вас уже есть представление о повторяющихся данных.
Вы можете попробовать использовать GROUP BY
и HAVING
.
SELECT max(person_id) person_id,
first_name,
last_name,
ssn
FROM @t
GROUP BY first_name,
last_name,
ssn
HAVING count(*) = 1;
Если вы хотите использовать window function
, вот один из способов сделать это ..
select personid, first_name, last_name, ssn
from (select *, count(*) over (partition by first_name, last_name, ssn) freq from @t) a
where freq=1;
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.