對不起,問這一點,但我飛奔的想法選擇頂部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