我是靠谱客的博主 尊敬芝麻,最近开发中收集的这篇文章主要介绍按天、按周、按月、按季、按年分期别统计,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

为什么80%的码农都做不了架构师?>>>   hot3.png

在面对大数据量按期别统计时,数据库表中往往只有一个日期列,如果在统计时直接使用to_char函数转换成期别进行group by会导致SQL执行较慢,因为to_char后用不上索引,而大部分时候我们只建立一个函数索引to_char(r.finish_time, 'yyyy-mm-dd')。以下为各期别的to_char格式:

1)、按天统计,to_char(r.finish_time, 'yyyy-mm-dd');

2)、按月统计,to_char(r.finish_time, 'yyyy-mm');

3)、按年统计,to_char(r.finish_time, 'yyyy');

4)、按季统计,to_char(r.finish_time, 'yyyy-"Q"q');

5)、按周统计,to_char(r.finish_time, 'yyyy-iw');

 

如果时间范围不是日期范围,需将各统计方式时间段转换为日期时间段作为条件,便于使用索引to_char(r.finish_time, 'yyyy-mm-dd'),先过滤有效记录再分组统计。

1)、按天统计,不需再处理;

2)、按月统计,开始时间+"-01",结束时间加+"-31";

3)、按年统计,开始时间+"-01-01",结束时间加+"-12-31";

4)、按季统计和按周统计,根据开始时间和结束时间计算最小日期和最大日期。

 

问题一

按周统计不可以直接使用'yyyy-iw',周跨年时会出现如2013-12-312013-012014-01-012014-01,格式中的yyyy表示的是实际年份,2013-12-31和2014-01-01在同一周,如果直接group by将导致多出一个分组。

问题二

期间内如果有期别无记录将导致展现结果不连续,比如图中缺少一个点,需要程序再特殊处理。

 

解决方法是预先备好一张日期与各期别对照表,参考http://my.oschina.net/h2do/blog/268154。

转载于:https://my.oschina.net/h2do/blog/268156

最后

以上就是尊敬芝麻为你收集整理的按天、按周、按月、按季、按年分期别统计的全部内容,希望文章能够帮你解决按天、按周、按月、按季、按年分期别统计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部