很抱歉这个问题,但我已经没想到了
我有这张桌子:
[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
答案 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 Expressions和the 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