我需要一个查询,它将搜索表中的所有记录并仅返回具有2个或更多以相同4位数结尾的值的查询,但我没有特定的四位数我可以给你,我只需要它查找具有多个结束相同值的所有内容。 例如。表有:
person_number------------name
==============================
1234567------------------john
00004567-----------------mark
9999999------------------mike
0009999------------------lidia
10101010-----------------alex
23232323-----------------matt
98748484-----------------steve
我希望它只返回:
person_number------------name
==============================
1234567------------------john
00004567-----------------mark
9999999------------------mike
0009999------------------lidia
你看,我希望它返回以相同的最后4位数结尾的重复项,但我没有特定的数字给你所以我不能使用像'%9999'这样的东西。它也需要正确排序,所以我让它们彼此相邻。我需要找到重复并删除其中一个,但我不知道哪一个,直到我实际上看到其他列中的所有其他值,并选择手动删除哪一个。
谢谢!
答案 0 :(得分:3)
试试这个
select person_number,name
from
(
select person_number,name,count(1)over(partition by right(person_number,4)) as Cnt
from YourTable
)
Where Cnt > 1
答案 1 :(得分:0)
我只想延长病态的回答。
你说你想选择哪一个消除。但是,您还可以添加ORDER
关于CASE
语句的语句来过滤您想要消除的语句。
在这种情况下,我按"name"
排序,因此您可以使用rn > 1
删除所有内容并保留名字。
<强> SqlFiddleDemo 强>
select "person_number", "name", rn, zero_count
from
(
select "person_number",
"name",
substr("person_number", 1, 1),
count(1) over (partition by substr("person_number",-4)) as Cnt,
SUM(case
when substr("person_number", 1, 1) = '0' then 1
else 0 end) over (partition by substr("person_number",-4)) as zero_count,
row_number() over (partition by substr("person_number",-4) order by "name") as rn
from person
)
Where Cnt > 1
and zero_count > 0
ORDER BY substr("person_number",-4)
我增加了数据样本
zero_count
来计算每组中以0
开头的行数ZERO_COUNT = 2
)