现在我有一个学历表,
工号,学校名,专业名,学历名,开始日期,  结束日期
001,学校1,  专业1, 学历1, 2012-01-10,2012-06-01
001,学校2,  专业2, 学历2, 2012-07-01,2012-12-01
假如有这样的数据时,我现在想查出来的是
表在字段再加,是否是最终学历的字段,如果是显示1,非则显示0,
判断条件是,若结束日期最大的按1显示,其它均显示0,如按如上例子,我想查的结果是,001,学校1,  专业1, 学历1, 2012-01-10,2012-06-01, 0
001,学校2,  专业2, 学历2, 2012-07-01,2012-12-01,1请问这个怎么写查询语句,在线等,谢谢。

解决方案 »

  1.   

    select a.* ,level from tablea a where level <= (select max(cnt) from (select count(1) cnt,工号 from table a group by 工号))
      

  2.   

    select a.* ,level from tablea a connect by level <= (select max(cnt) from (select count(1) cnt,工号 from table a group by 工号)) 
      

  3.   

    first_value(结束日期) over(partition by 工号 order by 结束日期desc)
      

  4.   

    with test as (
    select '001' as str1,'2012-01-10' as ed from dual
    union all
    select '001' as str1,'2012-02-10' as ed from dual
    union all
    select '002' as str1,'2012-01-10' as ed from dual
    union all
    select '003' as str1,'2011-07-10' as ed from dual
    union all
    select '003' as str1,'2011-08-10' as ed from dual
    union all
    select '003' as str1,'2011-09-10' as ed from dual
    )
    select str1,ed,decode(rn,1,1,0) as resultflg from (
    select row_number()over(partition by str1 order by ed desc) as rn,str1,ed from test)=================================================
    1 001 2012-02-10 1
    2 001 2012-01-10 0
    3 002 2012-01-10 1
    4 003 2011-09-10 1
    5 003 2011-08-10 0
    6 003 2011-07-10 0
      

  5.   


    SQL> desc 学历表
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ---------------------------- 工号                                               NUMBER(5)
     学校                                               VARCHAR2(10)
     专业名                                             VARCHAR2(10)
     开始日期                                           DATE
     结束日期                                           DATESQL> select * from 学历表;      工号 学校       专业名     开始日期   结束日期
    ---------- ---------- ---------- ---------- ----------
             1 南开大学   外语       06-6月 -00 06-6月 -04
             1 复旦大学   数学       01-7月 -05 01-7月 -09
    SQL> select 学历表.*, decode(结束日期, (select max(结束日期) from 学历表), '1',
    '0') "是否最终学历" from 学历表;      工号 学校       专业名     开始日期   结束日期
    ---------- ---------- ---------- ---------- ---------- -
             1 南开大学   外语       06-6月 -00 06-6月 -04 0
             1 复旦大学   数学       01-7月 -05 01-7月 -09 1具体情况你可以再斟酌,也可以加一个字段,存储那个结果 ,然后你自己更新这样就可以持久化了;
    DECODE是ORACLE特有的,具体应用你也可以度娘下,如果不熟悉的话,如果不用它你也可以使用CASE WHEN THEN END。这个就不写了。