Я хочу найти дубликаты по первым трем символам фамилии, есть ли способ сделать это на SQL? Я могу сравнить все имя, но как нам сравнить первые несколько символов?
Ниже мои таблицы
custid forename surname dateofbirth
----------------------------------------
1 David John 16-09-1985
2 David Jon 16-09-1985
3 Sarah Smith 10-08-2015
4 Peter Proca 11-06-2011
5 Peter Proka 11-06-2011
Это мой запрос, который я сейчас запускаю для сравнения
SELECT
y.id, y.forename, y.surname
FROM
customers y
INNER JOIN
(SELECT
forename, surname, COUNT(*) AS CountOf
FROM customers
GROUP BY forename, surname
HAVING COUNT(*) > 1) dt ON y.forename = dt.forename
Вы можете использовать left():
select c.*
from (select c.*, count(*) over (partition by left(surname, 3)) as cnt
from customers c
) c
order by surname;
Вы также можете включить forename в partition by, если вы имеете в виду forename и первые три буквы фамилии.
Вы можете использовать существует следующим образом:
select t.* from t
Where exists
(select 1 from t tt
Where left(t.surname, 3) = left(tt.surname, 3) and t.custid <> tt.custid
)
order by t.surname;