oracle每小时分组查询,Oracle 天内按小时分组查询有关问题
Oracle 天內(nèi)按小時(shí)分組查詢問題
本帖最后由 hao123yao 于 2013-03-08 11:30:56 編輯
表名c_data_01。表結(jié)構(gòu):
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可以唯一確定一條數(shù)據(jù)。c_id大概有1萬,c_time為時(shí)間格式。每個(gè)c_id大概每半分鐘就有一條數(shù)據(jù),時(shí)間無規(guī)律。數(shù)據(jù)量是有點(diǎn)大,已使用分區(qū)表(先以c_time天分區(qū),再對(duì)c_id進(jìn)行哈希分區(qū))。a、b、c等為其它不重要字段。
問題一:
給定一個(gè)c_id和一個(gè)日期,查出該天內(nèi)每個(gè)小時(shí)內(nèi)的一條數(shù)據(jù),即共有24條數(shù)據(jù),每個(gè)小時(shí)一條。該條數(shù)據(jù)可以是小時(shí)內(nèi)的隨機(jī)數(shù)據(jù),也可以是小時(shí)內(nèi)最大時(shí)間對(duì)應(yīng)的數(shù)據(jù)。
下面的語句是查詢最大時(shí)間的,但速度有點(diǎn)慢。能否不用最大時(shí)間或者有沒有更好查詢的方法?
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條數(shù)據(jù),速度還好。但又不能保證每小時(shí)有一條數(shù)據(jù)。
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?
問題二:
如果要將每個(gè)c_id每個(gè)小時(shí)取出一條數(shù)據(jù)(無要求、隨機(jī)什么的都可以)放入另外一張p_data表中。
若用最大時(shí)間或隨機(jī)取數(shù)據(jù),同樣的問題,效率太低。有沒有改進(jìn)的方法或者其他更好的辦法?
/*小時(shí)內(nèi)最大時(shí)間*/
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')
總結(jié)
以上是生活随笔為你收集整理的oracle每小时分组查询,Oracle 天内按小时分组查询有关问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hmailserver怎么搭建php,h
- 下一篇: oracle中存在函数吗,Oracle中