关于oracle按日周月分组统计以及next_day()函数详解

948046hs 2018-06-01 原文

关于oracle按日周月分组统计以及next_day()函数详解

 1、概述

工作中遇到如下问题:统计周期内关键词数,而这里的周期内最常用的就是日周月,日月比较容易处理,

周的话可以通过next_day()函数实现。

2、实例问题

 日下,有一张表lij_test包括两个字段: test_time DATE,city varchar2(4).

下面我想统计,不同周期范围内的不同城市的记录总数。这里的不同周期为日周月。 
该问题的核心就是处理日期时间,即如何让同一周期范围内的时间返回同一个值,且该值是唯一的。 
如下,每个期间将会提供两种方式,需要指出的是,trunc()函数总是效率高。

2.1按照日统计

--效率高
select trunc(test_time,'DD') time,count(1) ct
from ljb_test
group by trunc(test_time,'DD')
order by time;
 或者
select to_char(test_time,'YYYYMMDD') time,count(1) ct
from ljb_test
group by to_char(test_time,'YYYYMMDD')
order by time;

 

 

以此类推按照小时统计,把时间处理为 
trunc(test_time,’HH24’) 
或者 
to_char(test_time,’YYYYMMDD HH24’)

 

2.2按照周统计

按照周统计问题的核心,就是如何让同一周的时间返回同一值。 
Oracle提供了一个函数next_day() 
next_day(date,n):计算date时间后下一个星期几的时间。n可以传递字符串,如’星期一’,’monday’。还可以传递数值,1代表周日。 
因为语言问题,这里推荐使用数字试下。

有这个函数,就可以实现了。 
只需要对日期做如下处理: 
trunc(next_day(test_time-7,2),’DD’)

其实trunc()函数可以直接实现返回周一。 
trunc(test_time,’iw’)

之所以介绍next_day()函数,如果我们传入的日期字段是varchar2类型的,那么两种方式简易成都一样。

如下,把完成的SQL写出:
效率高:

select trunc(test_time,'iw') time, count(1) ct
from ljb_test
group by trunc(test_time,'iw')
order by time;

或者

select trunc(next_day(test_time-7,2),'DD') time ,count(1) ct
from ljb_test
group by trunc(next_day(test_time-7,2),'DD')
order by time;

2.3按月统计

按月统计和按天统计一样

select trunc(test_time,'MM') time,count(1) ct
from ljb_test
group by trunc(test_time,'MM')
order by time;

或者 

select to_char(test_time,'YYYYMM') time,count(1) ct 
from ljb_test 
group by to_char(test_time,'YYYYMM') 
order by time;

 

posted on 2018-06-01 15:13 shine丶 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为948046hs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/948046hs/p/9121785.html

关于oracle按日周月分组统计以及next_day()函数详解的更多相关文章

  1. Oracle – 数据库的实例、表空间、用户、表之间关系

    完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。 1) 数据库是一系列物理文件的集合 […]...

  2. 记录一则FGA审计“A用户对B用户某张表的更新操作”需求

    记录一则FGA审计“A用户对B用户某张表的更新操作”需求 2018-06-11 21:34 by Alfred […]...

  3. oracle学习笔记(二十) 子程序——函数与触发器

    子程序——函数 语法 之前select语句中使用的函数,都是SQL内置函数,我们可以通过自定义函数更满足我们的 […]...

  4. Oracle 统计信息介绍

    Oracle 统计信息介绍 2019-07-29 13:34 by 空白葛, … 阅读, R […]...

  5. Oracle merge合并更新函数

    本博客介绍一下Oracle merge合并函数,业务场景:新增数据的时候要先查询数据库是否已经有改数据,有数据 […]...

  6. Oracle sql共享池$sqlarea分析SQL资源使用情况

    遇到需要排查一个系统使用sql的情况,可以通过查询Oracle的$sql、$ssssion、$sqlarea进 […]...

  7. 针对Oracle的审计方案

    主题:针对Oracle的审计方案数据库环境:Oracle 11g数据库审计需求: 1.需要对连接数据库的行为进 […]...

  8. Oracle SQL:select各类查询语句总结 – misswjr

    Oracle SQL:select各类查询语句总结 2018-08-07 15:13  misswjr  阅读 […]...

随机推荐

  1. 呵呵,Semaphore,就这?

    这是并发线程工具类的第二篇文章,在第一篇中,我们分析过 CountDownLatch 的相关内容,你可以参考 […]...

  2. ABAP开发基础知识:5) 内表(Internal Table)

    ABAP开发基础知识:5) 内表(Internal Table)     内表与结构体基本类似,它同样是程序运 […]...

  3. 2019.3.22 区块链论文翻译

    Blockchain for the Internet of Things:Present and Futur […]...

  4. Win10系统下安装labelme,json文件批量转化

      一、安装环境:windows10,anaconda3,python3.6         由于框架mask […]...

  5. 《新浪微博用户兴趣建模系统架构》阅读笔记

      微博用户兴趣建模系统整体架构如图1所示,其由实时系统和离线挖掘系统两个子系统构成。因为每时每刻都有大量微博 […]...

  6. 构建Angular4项目小结

    1.angular4的优点 angular是一个比较完善的前端MVC框架,包含了模板,数据双向绑定,路由,服务 […]...

  7. Ubuntu设置系统文本为中文

    介绍 默认情况下,系统的文本都为英文。在控制台执行命令的时候经常会有英文提示,如果看不懂英文或者看不惯外国人的 […]...

  8. 你知道数字签名吗?

    数字签名 一、数字签名简介 数字签名是基于公钥密码体制(非对称密钥密码体制)的。 1.1.基本特征 数字签名必 […]...

展开目录

目录导航