从表中仅选择具有相同键值的一行

时间:2015-02-24 07:12:19

标签: sql sql-server

我有这张桌子:

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

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
相关问题