table Name : A
No Name Date
00001 james 2005/12/01
00001 james 2005/12/02
00001 james 2005/12/03
00001 james 2005/12/04
00001 james 2005/12/05
00002 jack 2005/12/01
00002 jack 2005/12/02
00002 jack 2005/12/03
00002 jack 2005/12/04
00003 kevin 2005/12/01
00003 kevin 2005/12/02
00003 kevin 2005/12/03給定一個日期(參數)例 2005/12/04,如何得到前連續4天的數據,不足4天的數據不顯示
例如上表00003 只有1,2,3日的數據所以都不顯示.想得到的資料如下:
No Name Date
00001 james 2005/12/01
00001 james 2005/12/02
00001 james 2005/12/03
00001 james 2005/12/04
00002 jack 2005/12/01
00002 jack 2005/12/02
00002 jack 2005/12/03
00002 jack 2005/12/04請問哪位高手能幫忙寫這個sql語句? 謝謝
No Name Date
00001 james 2005/12/01
00001 james 2005/12/02
00001 james 2005/12/03
00001 james 2005/12/04
00001 james 2005/12/05
00002 jack 2005/12/01
00002 jack 2005/12/02
00002 jack 2005/12/03
00002 jack 2005/12/04
00003 kevin 2005/12/01
00003 kevin 2005/12/02
00003 kevin 2005/12/03給定一個日期(參數)例 2005/12/04,如何得到前連續4天的數據,不足4天的數據不顯示
例如上表00003 只有1,2,3日的數據所以都不顯示.想得到的資料如下:
No Name Date
00001 james 2005/12/01
00001 james 2005/12/02
00001 james 2005/12/03
00001 james 2005/12/04
00002 jack 2005/12/01
00002 jack 2005/12/02
00002 jack 2005/12/03
00002 jack 2005/12/04請問哪位高手能幫忙寫這個sql語句? 謝謝
解决方案 »
- 怎样在创建表时,指定创建2个聚簇字段
- jsp程序,数据库oracle11g,window2008tomcat5.0.18发布,网站总是不定时与数据库断开连接,需要重新启动tomcat,这是怎么回事?
- 帮分析一下这样的语句该怎么写啊
- oracle客户端与INFORMIX客户端有冲突的!!
- 高分求救!如何从ORACLE中导出成.DBF格式的文件?在线等!!!
- 用sqlldr导入数据到分区表后索引出错,请高手帮我!
- 只有 DBA 才能导入由其它 DBA 导出的文件
- 急!oracle 数据的导入
- 创建repository时出现的问题!help!
- 帮忙看看,这段sql那里错了
- 5K一个月高薪面试题??
- is not null 为何不起作用呢?
where A.no=B.no
and A.date>to_date('2005-12-04','yyyy-mm-dd')-4
and B.Maxdate<=to_date('2005-12-04','yyyy-mm-dd')
select A.*,B.maxdate from A, (select no,max(date) maxdate from A) B
where A.no=B.no
and A.date>to_date('2005-12-04','yyyy-mm-dd')-4
and A.date<=to_date('2005-12-04','yyyy-mm-dd')
and B.Maxdate>=to_date('2005-12-04','yyyy-mm-dd')
select 8 from mtb4
result:
No Name timeDate
00001 james 2005/12/01
00001 james 2005/12/02
00001 james 2005/12/03
00001 james 2005/12/04
00001 james 2005/12/05
00002 jack 2005/12/01
00002 jack 2005/12/02
00002 jack 2005/12/03
00002 jack 2005/12/04
00003 kevin 2005/12/01
00003 kevin 2005/12/02
00003 kevin 2005/12/03select no,name,timedate
from mtb4 a
where exists (select 0 from mtb4 where a.no=no and timedate='2005/12/04')
and to_date(timeDate,'yyyy/mm/dd')<=to_date('2005/12/04','yyyy/mm/dd')
order by no,timedate
from a
where A.date>to_date('2005-12-04','yyyy-mm-dd')-4
and A.date<to_date('2005-12-05','yyyy-mm-dd')
and (a.no,a.name) in
(
select a.no,a.name
from a
where A.date>to_date('2005-12-04','yyyy-mm-dd')-4
and A.date<to_date('2005-12-05','yyyy-mm-dd')
group by a.no,a.name
having count(*)=4
)A
connect by level <=4) b
where a.date=b.date
group by no having count(distinct a.date)=4
首先考虑
找出记录超过4的
S0 = SELECT NO FROM (SELECT COUNT([DATE]) DT, NO FROM A GROUP) WHERE DT > 3
然后
S1 = SELECT ROWNUM RN, N, DT FROM(SELECT [NO] N, [DATE] DT FROM A ORDER BY [NO])
这句话作为子查询,在下边用 S1代替,为了让你看清楚
S2 = SELECT MIN(RN) RN, N FROM (S1) GROUP BY N --找到个人的最小编号
S3 = SELECT A.RN - B.RN RN, N, DT FROM S1 A, S2 B, WHERE A.N = B.N --自己可以看看什么结果
然后:
S4 = SELECT FROM S3 WHERE RN < 5 AND N IN (S0)我相信已经很清楚了,自己套用以下吧,很多事情不能给得太直接了,思路最重要