Dear All:
小弟今被一sql困扰,请高人帮忙指点迷津。
create table test4
(well_id varchar2(10),
prod_date date,
val number);insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),1);
insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),2);
insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),3);
insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),4);insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),5);
insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),6);
insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),7);
insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),8);insert into test4 values('A',to_date('2010-6-5','yyyy-mm-dd'),9);
insert into test4 values('A',to_date('2010-6-5','yyyy-mm-dd'),10);
insert into test4 values('A',to_date('2010-6-5','yyyy-mm-dd'),11);insert into test4 values('A',to_date('2010-7-1','yyyy-mm-dd'),12);
insert into test4 values('A',to_date('2010-7-1','yyyy-mm-dd'),13);
insert into test4 values('A',to_date('2010-7-1','yyyy-mm-dd'),14);commit;
先希望取出 well_id组内,小于输入日期的最近3个日期对应的记录。
例如:A分组内小于2010-7-3的3个日期(2010-7-1 、2010-6-5、2010-6-3) 的所有记录。
小弟sql菜鸟,通过子查询来实现该功能。
但是觉得大家肯定有更简单的方法。还望高手不甚赐教。my sql as followings sucks:select b.* from test4 b
where exists
(select 1 from
(select well_id,prod_date from
(select distinct well_id,prod_date from test4
where prod_date <= to_date('2010-7-3','yyyy-mm-dd')
order by prod_date desc) where rownum<=3) a
where a.well_id = b.well_id and a.prod_date = b.prod_date);
小弟今被一sql困扰,请高人帮忙指点迷津。
create table test4
(well_id varchar2(10),
prod_date date,
val number);insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),1);
insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),2);
insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),3);
insert into test4 values('A',to_date('2010-6-1','yyyy-mm-dd'),4);insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),5);
insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),6);
insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),7);
insert into test4 values('A',to_date('2010-6-3','yyyy-mm-dd'),8);insert into test4 values('A',to_date('2010-6-5','yyyy-mm-dd'),9);
insert into test4 values('A',to_date('2010-6-5','yyyy-mm-dd'),10);
insert into test4 values('A',to_date('2010-6-5','yyyy-mm-dd'),11);insert into test4 values('A',to_date('2010-7-1','yyyy-mm-dd'),12);
insert into test4 values('A',to_date('2010-7-1','yyyy-mm-dd'),13);
insert into test4 values('A',to_date('2010-7-1','yyyy-mm-dd'),14);commit;
先希望取出 well_id组内,小于输入日期的最近3个日期对应的记录。
例如:A分组内小于2010-7-3的3个日期(2010-7-1 、2010-6-5、2010-6-3) 的所有记录。
小弟sql菜鸟,通过子查询来实现该功能。
但是觉得大家肯定有更简单的方法。还望高手不甚赐教。my sql as followings sucks:select b.* from test4 b
where exists
(select 1 from
(select well_id,prod_date from
(select distinct well_id,prod_date from test4
where prod_date <= to_date('2010-7-3','yyyy-mm-dd')
order by prod_date desc) where rownum<=3) a
where a.well_id = b.well_id and a.prod_date = b.prod_date);
解决方案 »
- 求解:怎么把这两个语句合成一个?
- SQL中引号?
- oracle10g 函数怎样调用存储过程 返回值?急
- 在关联查询视图表和本地表的时候报无法从套接字读取更多的数据
- crystal report 10怎么调用oracle的procedure
- 在导入一张表时,使用show=y参数,报了(ora-00001)违反唯一约束条件的错,why?
- 请高手指点SQL语句
- windows下备份ORACLE时,在批处理文件中,自动根据当前时间生成文件名称 ,参数是什么
- 一个具有导出功能的用户,其拥有的最小权限是什么?
- oracle存储过程每天重置序列问题
- 一个表里同时建 主外建???
- oracle 10g 不同用户之间存储过程授权
select well_id,prod_date,val,DENSE_RANK() over(partition by well_id order by prod_date desc) rn from test4
where prod_date <= to_date('2010-7-3','yyyy-mm-dd')
) where rn <= 3
多谢!确实比我的sql简单。不知道还有更简单的sql不?