首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

急 请问 oracle 分组 查询

2012-04-22 
急 请教 oracle分组 查询表结构 如下表名:test1字段 id , ttime ,tvalue类型都是number类型;主键是由 id

急 请教 oracle 分组 查询
表结构 如下

  表名:test1
  字段 id , ttime ,tvalue 类型都是number类型;
   
  主键是由 id 和 ttime 联合组成;
 
  其中ttime 是 1970-01-01 08:00:00 到现在的秒数 ;

  里面的数据 每个ID 每天 有好几个时间段的数据,比如 ID为1 的 1点 的数据 ,2点, 的数据,2.30 的数据 等等 
   
  现在要得到 每个ID 每天 最接近23点的记录的数据, 请问该如何实现啊?



[解决办法]
ttime的数据格式是怎么样的?
[解决办法]

SQL code
with tb as(select 1 id, 400000 ttime ,'dsads' tvalue from dual union allselect 1 id, 400009 ttime ,'dsads' tvalue from dual union allselect 2,333333 ttime,'dsads' from dual union allselect 2,333334 ttime,'dsads' from dual union allselect 3,733334 ttime,'dsads' from dual union allselect 6,833334 ttime,'dsads' from dual union allselect 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
[解决办法]
SQL code
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 

热点排行