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語句? 謝謝

解决方案 »

  1.   

    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 B.Maxdate<=to_date('2005-12-04','yyyy-mm-dd')
      

  2.   

    我靠,错了...应该是
    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')
      

  3.   

    create table mtb4 (no varchar2(10),name varchar2(10),timedate varchar2(20))
    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
      

  4.   

    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') 
              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
      

  5.   

    select no from test2 a, (select to_date('20051204','yyyymmdd')+1-level date from dual 
             connect by level <=4) b
    where a.date=b.date
    group by no having count(distinct a.date)=4
      

  6.   

    我回答一个,如果觉得可以,给点分数就可以了
    首先考虑 
    找出记录超过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)我相信已经很清楚了,自己套用以下吧,很多事情不能给得太直接了,思路最重要