选择带有分组的前1名

Chr*_*ris 2 sql-server

我有两列:

namecode name
050125  chris
050125  tof
050125  tof
050130  chris
050131  tof
Run Code Online (Sandbox Code Playgroud)

我想按名称代码进行分组,并仅返回出现次数最多的名称.在这种情况下,结果将是

050125  tof
050130  chris
050131  tof
Run Code Online (Sandbox Code Playgroud)

这是SQL Server 2000

Mic*_*ier 10

我通常ROW_NUMBER()用来实现这一点.不确定它如何针对各种数据集执行,但我们没有因使用而遇到任何性能问题ROW_NUMBER.

PARTITION BY子句指定将行号"分组"的值,该ORDER BY子句指定应如何对每个"组"中的记录进行排序.因此,通过NameCode对数据集进行分区,并获取行号为1的所有记录(即每个分区中的第一条记录,按ORDER BY子句排序).

SELECT 
    i.NameCode, 
    i.Name
FROM 
(
    SELECT 
        RowNumber = ROW_NUMBER() OVER (PARTITION BY t.NameCode ORDER BY t.Name),
        t.NameCode,
        t.Name
    FROM
        MyTable t
) i
WHERE
    i.RowNumber = 1; 
Run Code Online (Sandbox Code Playgroud)