Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 选择行并按id分组,并对n个最近的行进行排序(按日期)_Sql_Oracle_Group By_Aggregation_Top N - Fatal编程技术网

Sql 选择行并按id分组,并对n个最近的行进行排序(按日期)

Sql 选择行并按id分组,并对n个最近的行进行排序(按日期),sql,oracle,group-by,aggregation,top-n,Sql,Oracle,Group By,Aggregation,Top N,我有select返回的以下数据集: date code 23/01/2012 AA123 24/01/2012 AA123 29/01/2012 AA123 06/07/2012 AA123 17/02/2012 BB123 20/02/2012 BB123 04/06/2012 BB123 select按代码顺序给出每个代码的所有数据。我只想返回每个代码最近2个日期的行。返回的数据如下: date cod

我有select返回的以下数据集:

date          code     
23/01/2012    AA123
24/01/2012    AA123
29/01/2012    AA123
06/07/2012    AA123
17/02/2012    BB123
20/02/2012    BB123
04/06/2012    BB123
select按代码顺序给出每个代码的所有数据。我只想返回每个代码最近2个日期的行。返回的数据如下:

date          code     
23/01/2012    AA123
24/01/2012    AA123
17/02/2012    BB123
20/02/2012    BB123
我如何达到预期的结果?我试着用

select date, code
from table
where x,y,z
and rownum < 2 
order by code desc;
但它只返回前2行-

select
  date,
  code
from
    (select 
      date, 
      code,
      dense_rank() over (partition by code order by date) as rank
    from 
      table
    where 
      x,y,z)
where
  rank <= 2
order by 
  code desc;
您也可以使用秩或行数,而不是密集秩。它们之间有一点不同,所以一个可能比另一个更适合你的需要


您也可以使用秩或行数,而不是密集秩。它们之间有一点不同,因此一个可能比另一个更适合您的需要。

您可能可以使用这个。我没有测试

select date,code from table A where (select Count(*) from table B where A.code=B.code AND A.date > B.date ) < 2 

也许你可以用这个。我没有测试

select date,code from table A where (select Count(*) from table B where A.code=B.code AND A.date > B.date ) < 2 

分区依据/densite\u rank->which db?Oracle,正如这个问题所标记的那样。@TJ-:现在几乎所有的现代数据库管理系统。非常感谢-我使用rank,因为我想分配顺序。分区依据/densite\u rank->which db?Oracle,因为这个问题被标记了。@TJ-:现在几乎所有的现代数据库管理系统。非常感谢-我使用了rank,因为我想分配一个顺序。最新的还是最旧的?您的结果包括最旧的两个。最新的还是最旧的?你的结果包括最老的两个。我现在测试它。它起作用了。[链接]。我误解了这个问题。我注意到有人要求最晚的日期。但示例显示了最早的日期。我写了关于这个例子的查询。所以@user1726582只能在查询中将A.date>B.date更改为A.dateB.date更改为A.date