表结构 如下 表名:test1
字段 id , ttime ,tvalue 类型都是number类型;
主键是由 id 和 ttime 联合组成;
其中ttime 是 1970-01-01 08:00:00 到现在的秒数 ; 里面的数据 每个ID 每天 有好几个时间段的数据,比如 ID为1 的 1点 的数据 ,2点, 的数据,2.30 的数据 等等
现在要得到 每个ID 每天 最接近23点的记录的数据, 请问该如何实现啊?
字段 id , ttime ,tvalue 类型都是number类型;
主键是由 id 和 ttime 联合组成;
其中ttime 是 1970-01-01 08:00:00 到现在的秒数 ; 里面的数据 每个ID 每天 有好几个时间段的数据,比如 ID为1 的 1点 的数据 ,2点, 的数据,2.30 的数据 等等
现在要得到 每个ID 每天 最接近23点的记录的数据, 请问该如何实现啊?
解决方案 »
- 我建表时设置不了pctused和next值,建表后也改不了。
- plsql 装了不能用,咋回事?
- Oracle9i(64bit)在Solaris10(SPARC)平台上的内存限制!
- oracle 创建的用户登录
- (高手问题)distinct和order by 问题求解
- 我装的是9i,开机时总是报日志文件错误,说什么至少一个或一个以上服务错误什么的,我查看了事件管理器和服务,是以下的两个没起来
- ORA-00600 [kdddgb1]错误
- 提问:如何让select ResistanceRate as 体积电阻率(90℃)Ω.m, t.TRIALDATE from datequipement正常执行,别名中出现“(”会出错
- 请问我想安装一个占用资源最少的oracle服务器,用于学习,应该用什么版本?
- 性能问题?
- 连接数据库报错
- oracle10g无法正常登陆
select 1 id, 400009 ttime ,'dsads' tvalue from dual union all
select 2,333333 ttime,'dsads' from dual union all
select 2,333334 ttime,'dsads' from dual union all
select 3,733334 ttime,'dsads' from dual union all
select 6,833334 ttime,'dsads' from dual union all
select 6,833333 ttime,'dsads' from dual )
select * from
(select id ,ttime,tvalue,
row_number()over(partition by id, trunc((ttime +8*3600)/(3600*24))--id 天分组
order by abs(mod(ttime +8*3600,3600*24)-23*3600)asc) rn --按照绝对值升序
from tb)
where rn=1
不知道是不是这样啊……
你没给数据,自己编的……
247 1324866653.000 150.521
247 1324866683.000 150.966
247 1324866713.000 151.635 248 1324866653.000 0.021
248 1324866683.000 0.022
248 1324866713.000 0.023当然这个是根据ID和时间排过序的, 数据库中的数据就是类似这样的数据,请问该如何实现我想要的结果呢?非常感谢
(select id ,ttime,tvalue,
row_number()over(partition by id, trunc((ttime +8*3600)/(3600*24))--id 天分组
order by abs(mod(ttime +8*3600,3600*24)-23*3600)asc) rn --按照绝对值升序
from tb)
where rn=1
这个查询的结果,不是你想要的吗?
如果不是,你把你的预期值贴出来……