Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择SQL Server上每个帐户最多两行_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

选择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