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語句? 謝謝
解决方案 »
- 数据库服务器经常出现CPU占用率100%的情况,联入数据库的有40多个用户,主要在运行数据量比较大的报表时出现这个现象,怎么优化报表程序都难以改善
- sql语句插入数据问题,请大侠指导
- 求各位大拿赐教 oracle first last 为什么查不到5000
- 求助各位大虾,本科毕业设计做Oracle数据库方面的可以做什么?
- 关于打开oracle的XXX-pc:1158/em一个奇怪的问题?
- 英语学习方法
- 高分SQL文求助——如何根据条件设定检索项目?
- 谁能帮我做下优化
- 因函数中的死循环,我该如何解锁呢?
- 在“服务”中不能启动oracle问题
- 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)我相信已经很清楚了,自己套用以下吧,很多事情不能给得太直接了,思路最重要