对不起,问这一点,但我飞奔的想法选择顶部COLUMN1匹配COLUMN2
我有这个表:
[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
我想获得最高的[PID]为[ID]与[VID]匹配这个[PID]
有什么想法?
我使用MSSQL 2008
对不起,问这一点,但我飞奔的想法选择顶部COLUMN1匹配COLUMN2
我有这个表:
[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
我想获得最高的[PID]为[ID]与[VID]匹配这个[PID]
有什么想法?
我使用MSSQL 2008
我会使用Common Table Expressions(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
单程
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
对不起,你剥夺了点:)但Bliek的解决方案是更加舒适,并提供了选择多了很多...... – 2009-02-13 07:19:52
由于您使用的Microsoft SQL Server 2008,那么我建议Common Table Expressions和the OVER clause完成分割结果划分为组由编号为,并返回每组中的第一排(由pid排序)。 Bliek的回答显示了一种方法。
(此相同的基本方法,顺便说一句,是更有效的分页非常有用的,也是如此。)
没有一个极其伟大的方式与“标准” SQL做到这一点。在SQLMenace的答案中显示的方法仅适用于可以将子查询用作表的数据库。例如,它可能是SQL Server 2000中完成此操作的一种方法,但可能无法在每个主流RDBMS中使用。
SRY ......这是2008年MSSQL – 2009-02-12 14:45:33
为您解决方案提供了更多的选择,我会给你点! – 2009-02-13 07:20:24