SQL重复查询

时间:2014-07-17 01:00:10

标签: sql duplicates

表格如下:

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有点新意,所以这是我最好的拍摄。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作。它按名称对数据进行分区,并在分区中分配一个数字。忘记提到我在SQL Server 2012中这样做了。

select *, 
  row_number() over (partition by name order by id) as DuplicatePosition
from test
order by id

SQL Fiddle Demo

答案 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