ORACLE怎么用SQL查询多张表和多个时间点的数据的行数?

小弟用下面的SQL可以实现查多个表的行数,但如何实现加上多个时间点的行数,请大侠补充,小弟不胜感激。
select a.first_result, count(1) check_1 from c_tpa_r_bsc_sum a where a.first_result=trunc(sysdate,'hh24')-3/24 group by a.first_result
union all
select b.first_result, count(2) from c_tpa_r_site_sum b where b.first_result=trunc(sysdate,'hh24')-3/24 group by b.first_result
union all
select c.first_result, count(3) from c_tpa_r_bts_sum c where c.first_result=trunc(sysdate,'hh24')-3/24 group by c.first_result

这个SQL查出来的是当天12点这三张表数据的行数,而我要至少监控24小时内这三张表的行数。
小弟的想法是在右边再加几列check_2,check_3...多监控几个时间点的数据的行数,但SQL或视图该如何写呢,请大侠明示。小弟真的没悬赏分了,还请大侠不要介意。
就是我们这边要监控十几张表每小时的数据,截图是其中三张表在12点的时候一共用多少条数据,我想写一个SQL,可以监控多张表多个时间点的一共有多少条数据入库,所以想在右边多加几列,比如check_1是当天12点数据记录,check_2要监控11点的,依次类推。望高手指教

第1个回答  2014-07-07
你要加的check_2,check_3...是不同时间点check,和check1是一类的,所以不应该往右加列啊,直接往下加行就行了。
而且建议:2列是不能完全标识出区别的,应该加一列,比如select ‘第一张表’,a.first_result, count(1) check_1 from c_tpa_r_bsc_sum a where a.first_result=trunc(sysdate,'hh24')-3/24 group by a.first_result
union ...

当然,你可以加完了后做行转列追问

直接用union加行的话看着很不方便啊,一共十几张表,大概需要监控24个小时的数据,加列的话看着更直观一些,大侠能否给想想办法

追答

额,24个小时,每个监控点算2列(时间+CHECK),那就要48列,你真觉得全列显示直观吗?
我觉得你可以写个存储过程,建立一个结果展示表,每隔1小时INSERT一次数据,想怎么展示就怎么展示。

追问

大侠说的有道理,我明天写个存储过程试试,不过我们的服务器都比较老,不知道配上定时任务全天监控的话会不会对机子负荷有影响。有问题明天再问你啊。还有你说的加完 后做行转列是怎么做?小弟菜鸟,还忘指教。。

追答

参考:
http://www.cnblogs.com/maanshancss/archive/2013/03/13/2957108.html

本回答被提问者采纳
第2个回答  2014-07-07
如果是要将3个张表的数据合并在一起的,统计完行数后可以依据a.first_result 用left join 来实现,参考sql如下
select ta.first_result, ta.c1, tb.c2, tc.c3
from ta
left join tb on ta.first_result = tb.first_result
left join tc on ta.first_result = tc.first_result;
相似回答