sql – 在Oracle中选择组的前n个元素

我有一个Oracle表,它有一个名称,值,时间列.基本上,该表用于记录目的,以存储对特定名称所做的更改,以前的值是什么以及更改的时间.

我需要制定一个查询获取特定名称的前n个更改,输出应该包含表中的所有名称.
任何帮助/建议?

编辑:

Name         Value     Time
Harish       Pass      1-Nov-2011
ravi         Fail      2-Nov-2011
Harish       Absent    31-Oct-2011
Harish       Attended  31-Aug-2011 
Harish       Present   31-Jul-2011

我需要在11月1日,10月31日,8月31日和拉维选择Harish的细节.

解决方法

这就是你追求的吗?
sql> alter session set nls_date_format = 'DD-Mon-YYYY HH24:Mi:SS';

Session altered.

sql> drop table so_test;

Table dropped.

sql> create table so_test  (
  2    n varchar2(32)
  3,v varchar2(32)
  4,t date );

Table created.

sql> 
sql> insert into so_test values ( 'X','Test1',to_date('01-Jan-2011 12:00:00','DD-Mon-YYYY HH24:Mi:SS') );

1 row created.

sql> insert into so_test values ( 'X','Test2',to_date('01-Jan-2011 13:00:00','Test3',to_date('01-Jan-2011 14:00:00','DD-Mon-YYYY HH24:Mi:SS') );

1 row created.

sql> insert into so_test values ( 'Y','Test5',to_date('02-Jan-2011 12:00:00','Test6',to_date('03-Jan-2011 12:00:00','Test7',to_date('04-Jan-2011 12:00:00','DD-Mon-YYYY HH24:Mi:SS') );

1 row created.

sql> 
sql> 
sql> select n,v,t from (
  2  select n,t,rank() over ( partition by n order by t desc) r
  3  from so_test
  4  ) where r <= 2;

N                V                T
-------------------------------- -------------------------------- --------------------
X                Test3                01-Jan-2011 14:00:00
X                Test2                01-Jan-2011 13:00:00
Y                Test7                04-Jan-2011 12:00:00
Y                Test6                03-Jan-2011 12:00:00

sql>

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...