Sql server 选择具有匹配列2的顶部列1
很抱歉问这个问题,但我已经没有主意了 我有这张桌子:Sql server 选择具有匹配列2的顶部列1,sql-server,sql-server-2008,Sql Server,Sql Server 2008,很抱歉问这个问题,但我已经没有主意了 我有这张桌子: [id] [pid] [vid] 1 4 6844 1 5 6743 2 3 855 2 6 888 ... 如何查询此eg.表以获得以下结果: [id] [pid] [vid] 1 5 6743 2 6 888 我希望获得[id]的最高[pid],
[id] [pid] [vid]
1 4 6844
1 5 6743
2 3 855
2 6 888
...
如何查询此eg.表以获得以下结果:
[id] [pid] [vid]
1 5 6743
2 6 888
我希望获得[id]的最高[pid],其[vid]与此[pid]匹配
有什么想法吗
我使用的是mssql 2008的单向
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
单程
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
由于您使用的是Microsoft SQL Server 2008,因此我建议您按id将结果分成多个组,并仅返回每个组中的第一行(按pid排序)。布利克的回答说明了一种方法 (顺便说一句,同样的基本方法对于更高效的分页也非常有用。)
使用“标准”SQL并没有一个非常好的方法来实现这一点。SqlMenage答案中显示的方法仅适用于可以将子查询用作表的数据库。例如,这可能是在SQL Server 2000中实现这一点的一种方法,但可能不适用于所有主流RDBMS。由于您使用的是Microsoft SQL Server 2008,因此我建议您通过id将结果划分为多个组,并仅返回每个组中的顶行(按pid排序)。布利克的回答说明了一种方法 (顺便说一句,同样的基本方法对于更高效的分页也非常有用。)
使用“标准”SQL并没有一个非常好的方法来实现这一点。SqlMenage答案中显示的方法仅适用于可以将子查询用作表的数据库。例如,在SQLServer2000中,这可能是实现这一点的一种方法,但可能不适用于所有主流的RDBMS。我将使用公共表表达式(CommonTableExpressions,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
我会使用公共表表达式(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
很抱歉剥夺了您的积分:)但是Bliek的解决方案更舒适,提供了更多的选项…很抱歉剥夺了您的积分:)但是Bliek的解决方案更舒适,提供了更多的选项…因为您的解决方案提供了更多的选项,我会给您积分!由于您的解决方案提供了更多的选项,我将告诉您重点!