Oracle query that count connections by minute with start and end times provided

数据结构类似

SQL> select * from t;

B                 E                 N
----------------- ----------------- --------------------
20150106 01:00:02 20150106 01:00:42 A
20150106 01:00:02 20150106 01:00:12 B
20150106 02:01:02 20150106 01:10:03 C
20150106 02:01:07 20150106 02:01:08 D
20150106 02:00:01 20150106 02:00:02 E
20150106 01:00:03 20150106 01:00:07 F

6 rows selected.

数据表定义

SQL> @desc t
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      B                                        DATE
    2      E                                        DATE
    3      N                                        VARCHAR2(10)

需求抽象

以分钟为单位统计指定天每分钟内N的个数。

思路:

1、每天1440分钟,构造全天的分钟集合

SELECT to_date(‘20150106 00:00:00‘ , ‘yyyy-mm-dd hh24:mi:ss‘) +

numtodsinterval (level , ‘minute‘) dt

FROM dual

CONNECT BY level <= 24 * 60

2、左外连接,条件 dt >= begin and dt < end + 1

3、需要截取t.begin 和 t.end到分钟

对于begin , trunc(begin,‘mi‘)

对于end   , trunc(end+ numtodsinterval(1, ‘minute‘),‘mi‘))  // trunc( end + 1 ,[format])

4、按分钟聚合统计

结果

WITH each_minute AS

( SELECT to_date( ‘20150106 00:00:00‘ , ‘yyyy-mm-dd hh24:mi:ss‘ ) +

numtodsinterval (level , ‘minute‘) dt

FROM dual

CONNECT BY level <= 24 * 60 )

SELECT trunc (em.dt, ‘mi‘) d, count (t.n) cnt

FROM each_minute em

LEFT OUTER JOIN t

ON (em.dt >= trunc (t.b, ‘mi‘) AND em.dt < trunc (t.e+ numtodsinterval (1 , ‘minute‘), ‘mi‘ ))

group by trunc(em.dt, ‘mi‘ )

order by 1;

简单测试

SQL> WITH each_minute AS
  2   (SELECT to_date(‘20150106 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘) +
  3           numtodsinterval(level, ‘minute‘) dt
  4      FROM dual
  5    CONNECT BY level <= 24 * 60)
  6  SELECT trunc(em.dt, ‘mi‘) d, count(t.n) cnt
  7    FROM each_minute em
  8    LEFT OUTER JOIN t
  9      ON (em.dt >= trunc(t.b, ‘mi‘) AND
10         em.dt < trunc(t.e + numtodsinterval(1, ‘minute‘), ‘mi‘))
11   where t.n is not null   -- no need for 1440,just for test.
12   group by trunc(em.dt, ‘mi‘)
13   order by 1;

D                        CNT
----------------- ----------
20150106 01:00:00          3
20150106 02:00:00          1
20150106 02:01:00          1

时间: 2024-10-13 11:51:20

Oracle query that count connections by minute with start and end times provided的相关文章

Wrong number of parameters: expected 0, was given 1 Query: select count(*) from product where pname like &#39;%?%&#39; Parameters: [%小%]

eclipse在dao层写的模糊查询sql:String sql = "select count(*) from product where pname like '%?%'": 这样写会导致以下错误 Wrong number of parameters: expected 0, was given 1 Query: select count(*) from product where pname like '%?%' Parameters: [%小%]<br/> 原因:

Oracle基础之count(1)和count(*)的区别

在数据库中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 我在网上看到一些所谓的优化说建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描.而实际上如何写Count并没有区别. Count(1)和Count(*)实际上的意思是,评估Count(XXX)中的表达式XXX是否为NULL,如果为NULL则不计数,而非NUL

Where does Oracle SQL Developer store connections? oracle SQL Developer 连接信息保存的位置,什么地方

oracle SQL Developer 连接信息保存的位置,在什么地方? 在切换登录用户后,oracle SQL Developer 连接信息不见了.只要以前的用户信息还存在,可以在路径 C:\Users\用户名\AppData\Roaming\SQL Developer\system2.1.1.64.45\o.jdeveloper.db.connection.11.1.1.2.36.55.30找到连接信息. 参考信息 http://stackoverflow.com/questions/79

mysql quick query row count using sql

1. command show table status like '{table-name}'; 2. sample mysql> use inventory; Database changed mysql> show tables; +---------------------+ | Tables_in_inventory | +---------------------+ | customers | | decimalTest | | orders | | orders1 | | pro

Oracle 11g expdp中query参数的使用

expdp中提供了query参数,可以在需要按条件导出表中部分数据时使用,它的使用就像是在select语句中的where条件使用一样. 数据库版本 [email protected]>select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Releas

[Oracle][Performance]善用Materialized View提高查询性能#3 Query Rewrite

早期无query rewrite技术,DBACreate中继table提高前端查询性能,但前端程序也需要修改相关Sql statement(牵一发动全身) 可说相当麻烦,如果需求量少倒还好,但量大的话我想DBA这工作应该没人会想做的(事多钱少责任大~> 这篇就来看看Oracle query rewriete技术所带来的改善(MSSQL2005/2008也有应用) 文章均为自己见解,如有错误还请指教 Overview 当现有的Materialized views被用来满足请求时,查询优化器可以自动

zabbix监控oracle 12c

zabbix监控oracle 12c 前言 某公司需要监控Oracle 12C,采用orabbix是zabbix监控oracle数据库的插件,修改一些地方就可以监控了. 一.安装配置 mkdir /opt/orabbix cd /opt/orabbix mv conf/config.props.sample conf/config.props cp init.d/orabbix /etc/init.d/ chmod +x /etc/init.d/orabbix chkconfig orabbix

Pre-Query trigger in Oracle D2k / Oracle Forms

Pre-Query trigger in Oracle D2k / Oracle Forms DescriptionFires during Execute Query or Count Query processing, just before Form Builder constructs and issuesthe SELECT statement to identify rows that match the query criteria.Definition Level form or

zabbix监控Oracle

公司业务使用的是一直oracle数据库,老大要求监控表空间剩余大小并且当剩余过小时能够及时报警.刚想出来的方案是通过写脚本获取表空间的数据,通脚本中使用expect自动输入密码登陆oracle用户然后再登陆数据库查询数据返回给zabbix_server.但是由于脚本运行时间大概12秒左右,zabbix获取数据总是超时(只是个人理解,如果你有解决方法希望给我留言,谢谢).在网上搜索中发现zabbix插件-orabbix,原理是通过orabbix登陆被监控主机oracle数据库,查询数据.个人认为非