记录sql使用,按照小时统计24小时数据

CSDN话题挑战赛第2期
参赛话题:学习笔记

今天需要统计24小时内数据分布,每次都是现用现查,非常不方便,这次记录下,以便于下次使用

  • 一、主要功能是:固定返回24行数据,24小时的统计数据,不存在数据为0

  • 参考:

  • 使用with建立临时表aa、bb

    aa表查出24行对应24小时

    bb表查出统计的数据

    with 
    aa as(select rownum-1 rn from dual connect by rownum<=24),
    bb as (select count(1) num, to_char(start_time,'hh24') hours from record_relation  where  to_char(start_time,'yyyy-mm-dd') = '2022-09-17' group by to_char(start_time,'hh24')
    )
    SELECT RN,NVL(hours,0) HOURS,NVL(num,0) num FROM aa LEFT JOIN bb ON aa.RN=bb.hours ORDER BY RN ASC

    rn对应24小时,HOURS对应数据,有数据的显示小时,没有的显示0 ,num对应统计数

  • 参考上图,0点有数据,hours显示00,统计数为1,4点同理

connect by:

  • CONNECT BY子句在执行分层查询时确定行的父子关系。

    CONNECT BY子句具有以下常规形式:

    CONNECT BY { PRIOR parent_expr = child_expr |
     child_expr = PRIOR parent_expr }

    在候选父行上对 parent_expr 求值。如果 FROM 所返回行的 parent_expr = child_expr 结果为 TRUE,则此行被视为父行的子行。

  • 当连接条件(connect by条件)没有限制记录之间的关系(即 connect by里没有类似 id=prior pid的条件,而是 connect by rownum<xxx 或 connect by level<xxx )时,每一条记录都会作为自己或者其他记录的子节点,也就说,每一条记录的子节点就是表上所有的记录。而树的层数就是rownum(或是level)值。

  •  二、固定返回12行,按照月份统计数据

  •  with 
    aa as(select rownum rn from dual connect by rownum<=12),
    bb as (select count(1) num, to_char(start_time,'mm') hours from asset.data_dispatching_record  where  to_char(start_time,'yyyy-mm-dd') = '2022-09-17' group by to_char(start_time,'mm')
    )
    SELECT RN,NVL(hours,0) HOURS,NVL(num,0) num FROM aa LEFT JOIN bb ON aa.RN=bb.hours ORDER BY RN ASC

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值