选择SQL Server上每个帐户最多两行
我有这张桌子选择SQL Server上每个帐户最多两行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有这张桌子 ID AGE ACCNUM NAME -------------------------------- 1 10 55409 Intro 2 6 55409 Chapter1 3 4 55409 Chapter2 4 3 69591 Intro 5 6 69591 Outro 6 0
ID AGE ACCNUM NAME
--------------------------------
1 10 55409 Intro
2 6 55409 Chapter1
3 4 55409 Chapter2
4 3 69591 Intro
5 6 69591 Outro
6 0 40322 Intro
我需要一个查询,从每个ACCNUM返回两个最大年龄
在这种情况下,记录:
1, 2, 4, 5, 6
我尝试了太多的问题,但都不适合我
我试过这个问题
Select
T1.accnum, T1.age
from
table1 as T1
inner join
(select
accnum, max(age) as max
from table1
group by accnum) as T2 on T1.accnum = T2.accnum
and (T1.age = T2.max or T1.age = T2.max -1)
您可以使用:
您可以使用:
TSQL排名函数:行数
TSQL排名函数:行数
代码:
使用公共表表达式来实现所需的结果
代码:
使用公共表表达式来实现所需的结果
您正在使用哪个数据库?请在OVER子句中使用行号和ORDER BY DESC。Microsoft SQLServer@Yatiac,哪个版本?您使用的是哪个数据库?请在OVER子句中使用行号和ORDER BY DESC。Microsoft SQLServer@Yatiac,哪个版本?
select accnum
, age
from ( select accnum
, age
, row_number() over(partition by accnum order by age desc) as r
from table1 as T1) t where r < 3
select id, age, accnum, name
from
(
select id, age, accnum, name, ROW_NUMBER() Over (Partition By accnum order by age desc) as rn
from yourtable
) a
where a.rn <= 2
WITH CTE AS (SELECT ID, AGE, ACCNUM, NAME,
ROW_NUMBER() OVER(PARTITION BY ACCNUM ORDER BY AGE DESC) AS ROW_NUM
FROM T1)
SELECT ID, AGE, ACCNUM, NAME
FROM CTE
WHERE ROW_NUM <= 2