选择匹配column2的top column1

时间:2009-02-12 14:30:28

标签: sql-server sql-server-2008

很抱歉这个问题,但我已经没想到了

我有这张桌子:

[id]    [pid]    [vid]
1        4        6844
1        5        6743
2        3        855
2        6        888
...

如何查询此eg.table以获得以下结果:

[id]    [pid]    [vid]
1        5        6743
2        6        888

我想获得[id]的最高[pid],[vid]与此[pid]匹配

任何想法?

我正在使用mssql 2008

3 个答案:

答案 0 :(得分:4)

单程

select t1.* from
(select id,max(pid) as Maxpid
from yourtable
group by id) t2
join yourtable t1 on t2.id = t1.id
and t2.Maxpid = t1.pid

答案 1 :(得分:1)

由于您使用的是Microsoft SQL Server 2008,因此我建议Common Table Expressionsthe OVER clause完成 id 将结果分组,然后返回每组中的第一行(按 pid 排序)。 Bliek的答案显示了一种方法。

(顺便说一句,这种基本方法对于更高效的分页也非常有用。)

使用“标准”SQL没有一种非常棒的方法可以做到这一点。 SQLMenace的答案中显示的方法仅适用于可以将子查询用作表的数据库。例如,它是在SQL Server 2000中实现此目的的一种方法,但可能无法在每个主流RDBMS中使用。

答案 2 :(得分:1)

我会使用公用表表达式(CTE)。这提供了很多可能性:

WITH Result (RowNumber, [id], [pid], [vid])
AS
(
    SELECT Row_Number() OVER (PARTITION BY [id]
                              ORDER     BY [vid] DESC)
          ,[id]
          ,[pid]
          ,[vid]
      FROM MyTable
)
SELECT [id]
      ,[pid]
      ,[vid]
  FROM Result
 WHERE RowNumber = 1