表格如下:
id name 1 tom 2 bob 3 tom 4 tom 5 harry
我正在寻找导致以下结果的查询:
id name duplicateposition 1 tom 1 2 bob 1 3 tom 2 4 tom 3 5 harry 1
因此第一个tom的重复位置是1,第二个tom是2,第三个tom是3.第一个bob是1,第一个tom是1.是否有一个简单的查询来执行此操作?
这是我的尝试:
SELECT id, name, count(id) from table
我对sql有点新意,所以这是我最好的拍摄。
答案 0 :(得分:1)
您可以执行以下操作。它按名称对数据进行分区,并在分区中分配一个数字。忘记提到我在SQL Server 2012中这样做了。
select *,
row_number() over (partition by name order by id) as DuplicatePosition
from test
order by id
答案 1 :(得分:1)
这是一个适用于大多数数据库的通用自联接(尽管如果您可以访问窗口函数,则应该使用它们,因为它们通常更快)
select t1.id, t1.name, count(t2.id) duplicateposition
from mytable t1
join mytable t2
on t2.name = t1.name
and t2.id <= t1.id
group by t1.id, t1.name
order by t1.id