需求;连续3个月未申报(GL_WSBXX表,SBBZ申报标志,Y为已申报,N为未申报)。申报时间的列是SBRQ
即要查询GL_WSBXX表中SBRQ连续3个月SBBZ为N的信息。

解决方案 »

  1.   

    贴数据不可能的呵呵,SBRQ是date类型
      

  2.   

    --建表(其中id为单位ID)
    create table GL_WSBXX(id number,sbrq date,sbbz varchar2(10));--插入记录
    insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (1, to_date('01-01-2009', 'dd-mm-yyyy'), 'N');insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (1, to_date('01-02-2009', 'dd-mm-yyyy'), 'N');insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (1, to_date('01-03-2009', 'dd-mm-yyyy'), 'N');insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (2, to_date('01-01-2009', 'dd-mm-yyyy'), 'N');insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (2, to_date('01-02-2009', 'dd-mm-yyyy'), 'Y');insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (2, to_date('01-03-2009', 'dd-mm-yyyy'), 'N');insert into gl_wsbxx (ID, SBRQ, SBBZ)
    values (2, to_date('01-04-2009', 'dd-mm-yyyy'), 'N');--取得连续三个月单位id
    SELECT A.ID
      FROM (SELECT * FROM GL_WSBXX) a,
           (SELECT id, SBRQ, SBBZ, last_day(trunc(add_months(SBRQ, 2))) SBRQ1 FROM GL_WSBXX) b
     WHERE a.id = b.id AND
           a.SBRQ >= b.SBRQ AND
           a.SBRQ <= b.SBRQ1
           and a.sbbz = 'N'
           and b.sbbz = 'N'
     GROUP BY a.id,b.SBRQ1
    HAVING COUNT(1) >= 3;
      

  3.   

    想知道GL_WSBXX表是怎样记录数据的,不然写出来不是你要的。我想java3344520也是这么想的。你可以贴个图片。
      

  4.   

    7L的数据我借用了,希望没侵犯你的著作权,呵呵Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as csdn
    SQL> 
    SQL> --建表(其中id为单位ID)
    SQL> drop table GL_WSBXX;Table droppedSQL> create table GL_WSBXX(id number, sbrq date, sbbz varchar2(10));Table createdSQL> --插入记录
    SQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (1, to_date('01-01-2009', 'dd-mm-yyyy'), 'N');1 row insertedSQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (1, to_date('02-02-2009', 'dd-mm-yyyy'), 'N');1 row insertedSQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (1, to_date('03-03-2009', 'dd-mm-yyyy'), 'N');1 row insertedSQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (2, to_date('01-01-2009', 'dd-mm-yyyy'), 'N');1 row insertedSQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (2, to_date('01-02-2009', 'dd-mm-yyyy'), 'Y');1 row insertedSQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (2, to_date('01-03-2009', 'dd-mm-yyyy'), 'N');1 row insertedSQL> insert into gl_wsbxx
      2    (ID, SBRQ, SBBZ)
      3  values
      4    (2, to_date('01-04-2009', 'dd-mm-yyyy'), 'N');1 row insertedSQL> commit;Commit completeSQL> select id
      2    from (select id,
      3                 sbrq,
      4                 sbbz,
      5                 add_months(trunc(sbrq, 'mm'),
      6                            1 - rank() over(partition by id order by sbrq)) ord
      7            from (select id, sbrq, sbbz from gl_wsbxx where sbbz = 'N'))
      8   group by id, ord
      9  having count(*) >= 3
     10  /        ID
    ----------
             1SQL>