今天我用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最新的材料信息),有没有什么好办法把所有列显示出来。
比如现在数据表:
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最新的材料信息),有没有什么好办法把所有列显示出来。
解决方案 »
- ORACLE PL/SQL 字符串函数、数学函数、日期函数
- 请教,sqlload将数据库的表(table1)导出成CSV文件,急。。。。
- 应用层在读取oracle分页数据非常慢
- ORACLE 触发器问题
- 请教高手,怎么样在where条件里带判断语句
- 求救:关于Oracle Secure Enterprise Search(安全企业搜索) web源配置问题
- Oracle OTN 中文论坛招聘版主
- 查询语句优化问题
- 这样的update语句,为何在Access可以执行,oracle里面却错,错在哪里?
- 求教shared pool duration特性的作用是啥?
- 紧急求教oracle表设计和查询问题
- 统计各表占用空间情况
from t
where rn=1
from t
group by id,New_Material_ID,Old_Material_ID;
你用了group by 语句,没有聚合函数的列必须是分组的;
————————————————————————————————
经验证,此语句在PL/SQL 中语法解析错误....
select id, New_Material_ID, Old_Material_ID, Eventtime,
max(Eventtime) over(partition by id)
from t
你的结果集中所有ID相同的行都显示出来了,我要的是eventtime 最大的那行。
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;
这样呢?
select * from t
where (id, Eventtime) in ( select id, max(Eventtime) from t group by id)楼主想要啥,不理解
这样的方法根本和GROUP BY 是2码事。
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
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