Sql 选择行并按id分组,并对n个最近的行进行排序(按日期)
我有select返回的以下数据集: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
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.date