今天我用Group by 后得到的一个结果集
比如现在数据表:
ID New_Material_ID      Old_Material_ID Eventtime
----    ---------------      ---------------    ---------
N001 N001-001                         6月22日
N001 N001-002        N001-001   7月18日
N002 N002-001                 6月22日
N002 N002-002        N002-001         5月18日
N002 N002-003        N002-002   9月12日我用select id,max(eventtime)
     from  t
     group by id
得到的记录只包含了 ID 列合 Eventtime 列(即ID最新的材料信息),有没有什么好办法把所有列显示出来。

解决方案 »

  1.   

    select id,New_Material_ID,Old_Material_ID,Eventtime ,row_number() over(PARTITION BY id ORDER BY eventtime) as rn
    from t
    where rn=1
      

  2.   

    select ID,New_Material_ID,Old_Material_ID,max(Eventtime) 
    from t 
    group by id,New_Material_ID,Old_Material_ID;
      

  3.   

    不能
    你用了group by 语句,没有聚合函数的列必须是分组的;
      

  4.   


    ————————————————————————————————
    经验证,此语句在PL/SQL 中语法解析错误....
      

  5.   


    select id, New_Material_ID, Old_Material_ID, Eventtime, 
           max(Eventtime) over(partition by id)
    from t
      

  6.   

    _____________________
    你的结果集中所有ID相同的行都显示出来了,我要的是eventtime 最大的那行。
      

  7.   


    select * from (
    select id, New_Material_ID, Old_Material_ID, Eventtime,
          row_number() over(partition by id order by Eventtime desc) rn
    from t)
    where rn = 1;
      

  8.   

    select * from t where row_number() over(PARTITION BY id ORDER BY eventtime)=1 
    这样呢?
      

  9.   


    select * from t 
    where (id, Eventtime) in ( select id, max(Eventtime) from t group by id)楼主想要啥,不理解
      

  10.   

    ___
    这样的方法根本和GROUP BY 是2码事。
      

  11.   

    select *
    from(
    select id,New_Material_ID,Old_Material_ID,Eventtime ,row_number() over(PARTITION BY id ORDER BY eventtime) as rn 
    from t )
    where rn=1
      

  12.   

    create table t (ID  varchar2(10), New_Material_ID varchar2(10),  
      Old_Material_ID varchar2(10), Eventtime date);
      
    insert into t(ID, New_Material_ID,     Old_Material_ID, Eventtime)
    values('N001', 'N001-001', '  ',to_date('20080622','yyyymmdd') );
    insert into t(ID, New_Material_ID,     Old_Material_ID, Eventtime)
    values('N001', 'N001-002','N001-001', to_date('20080718','yyyymmdd')) ;
    insert into t(ID, New_Material_ID,     Old_Material_ID, Eventtime)
    values('N002','N002-001','',to_date('20080622','yyyymmdd')) ;
    insert into t(ID, New_Material_ID,     Old_Material_ID, Eventtime)
    values('N002','N002-002','N002-001',to_date('20080518','yyyymmdd')) ;
    insert into t(ID, New_Material_ID,     Old_Material_ID, Eventtime)
    values('N002','N002-003','N002-002',to_date('20080912','yyyymmdd')) ;commit;select * from (
    select id,New_Material_ID,Old_Material_ID,Eventtime ,row_number() over(PARTITION BY id ORDER BY eventtime desc) as rn 
    from t) 
    where rn=1