0
我有這個表:從表中只選擇一個行有相同的密鑰值
reg_no | cname | no
1 | X | 1
1 | Y | 2
2 | X | 1
2 | Y | 2
我想要做的是選擇所有行,但我只希望每個reg_no一行時,我安排一下在desc(它應該只獲得每個reg_no最高的行)。
輸出應該是:
1 Y 2
2 Y 2
我有這個表:從表中只選擇一個行有相同的密鑰值
reg_no | cname | no
1 | X | 1
1 | Y | 2
2 | X | 1
2 | Y | 2
我想要做的是選擇所有行,但我只希望每個reg_no一行時,我安排一下在desc(它應該只獲得每個reg_no最高的行)。
輸出應該是:
1 Y 2
2 Y 2
使用Row_Number()
窗函數
select Reg_no,C_name,no from
(
select row_number() over(partition by reg_no order by no desc) Rn,*
from yourtable
) A
where rn=1
或ANSI SQL
標準將在sql server 2000
工作。找到max
否reg_no
然後join
結果回主表。
select A.Reg_no,A.C_name,A.no
from yourtable As A
Inner Join
(
select max(no) As no,Reg_no
from yourtable
group by Reg_No
) As B
on A.No=B.No and A.Reg_No=B.Reg_no
在MSSQL中使用CROSS APPLY,這將是
SELECT DISTINCT
r1.reg_no, r2.cname, r2.no
FROM
table_name r1
CROSS APPLY
(SELECT TOP 1
r.cname, r.no
FROM
table_name r
WHERE r1.reg_no = r.reg_no
ORDER BY r.no DESC) r2
你有沒有嘗試過什麼?你正在使用哪個DBMS? – 2015-02-24 07:14:13
我正在使用SQL Server 2000 ..我嘗試使用不同但它不會給我我需要的結果 – TheMartianGuy 2015-02-24 07:15:04
如果我使用top,例如top 1,它只會給我一行 – TheMartianGuy 2015-02-24 07:15:47