oracle每小时分组查询,Oracle 天内按小时分组查询有关问题
Oracle 天內按小時分組查詢問題
本帖最后由 hao123yao 于 2013-03-08 11:30:56 編輯
表名c_data_01。表結構:
uuid???c_id??????c_time??????????????????a?????????b????????c
1??????0001??????2013-3-6?00:01:00???1??????1?????1
2??????0002??????2013-3-6?00:00:00???1??????1?????1
3??????0001??????2013-3-6?00:01:30???1??????1?????1
4??????0002??????2013-3-6?00:01:35???1??????1?????1
其中uuid為主鍵,自增。c_id和c_time可以唯一確定一條數據。c_id大概有1萬,c_time為時間格式。每個c_id大概每半分鐘就有一條數據,時間無規律。數據量是有點大,已使用分區表(先以c_time天分區,再對c_id進行哈希分區)。a、b、c等為其它不重要字段。
問題一:
給定一個c_id和一個日期,查出該天內每個小時內的一條數據,即共有24條數據,每個小時一條。該條數據可以是小時內的隨機數據,也可以是小時內最大時間對應的數據。
下面的語句是查詢最大時間的,但速度有點慢。能否不用最大時間或者有沒有更好查詢的方法?
select?*
from?c_data_01
where?c_id?=?'0001'
and?c_time?in
(select?max(collect_time)
from?c_data_01
where?c_id?=?'0001'
and?c_time?>=
to_date('2013-3-6?00:00:00',?'yyyy-mm-dd?hh24:mi:ss')
and?c_time<
to_date('2013-3-7?00:00:00',?'yyyy-mm-dd?hh24:mi:ss')
group?by?trunc(c_time?,?'hh24'))
直接選取24條數據,速度還好。但又不能保證每小時有一條數據。
select?*
from?c_data_01
where?c_id?=?'0001'
and?c_time?>=
to_date('2013-3-6?00:00:00',?'yyyy-mm-dd?hh24:mi:ss')
and?c_time<
to_date('2013-3-7?00:00:00',?'yyyy-mm-dd?hh24:mi:ss')
and?rownum?
問題二:
如果要將每個c_id每個小時取出一條數據(無要求、隨機什么的都可以)放入另外一張p_data表中。
若用最大時間或隨機取數據,同樣的問題,效率太低。有沒有改進的方法或者其他更好的辦法?
/*小時內最大時間*/
insert?into?p_data
select?a1.c_id,a1.c_time,a1.a,a1.b,a1.c
from?c_data_01?a1,
(select?c_id,?max(c_time)?c_time
from?c_data_01
where?c_time?>=
to_date('2013-3-6?00:00:00',?'yyyy-mm-dd?hh24:mi:ss')
and?c_time?<
to_date('2013-3-7?00:00:00',?'yyyy-mm-dd?hh24:mi:ss')
總結
以上是生活随笔為你收集整理的oracle每小时分组查询,Oracle 天内按小时分组查询有关问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hmailserver怎么搭建php,h
- 下一篇: oracle中存在函数吗,Oracle中