我有这张桌子:
reg_no | cname | no
1 | X | 1
1 | Y | 2
2 | X | 1
2 | Y | 2
我想要做的是选择所有那些行,但是当我在desc中排列时,我只想为每个reg_no设置一行(它应该只为每个reg_no获取最高no的行)。
输出应为:
1 Y 2
2 Y 2
答案 0 :(得分: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
答案 1 :(得分:1)
在使用CROSS APPLY的MSSQL中,这将是
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