千家信息网

sqlserver/mysql如何按天、按小时、按分钟统计连续时间段数据

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关sqlserver/mysql如何按天、按小时、按分钟统计连续时间段数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一,写在前面的话最
千家信息网最后更新 2026年11月02日sqlserver/mysql如何按天、按小时、按分钟统计连续时间段数据

这篇文章将为大家详细讲解有关sqlserver/mysql如何按天、按小时、按分钟统计连续时间段数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一,写在前面的话

最近公司需要按天,按小时查看数据,可以直观的看到时间段的数据峰值。接到需求,就开始疯狂百度搜索,但是搜索到的资料有很多都不清楚,需要自己去总结和挖掘其中的重要信息。

针对sqlserver, 有几点需要给大家说清楚(不懂的自行百度):

•master..spt_values 是什么东西?能用来做什么?
•如何产生连续的时间段(年, 月, 天,小时,分钟)

二,master..spt_values是什么东西?能用来做什么呢?

相对固定通用的取数字的表,主要作用就是取连续数字,不过有个缺陷就是只能取到2047。可以执行下面语句就知道什么意思了。

select number from master..spt_values where type='p'

三,如何产生连续的时间段(年, 月, 天,小时,分钟)

在实际的运用中,目前主要是产生连续的时间段。我准备了常用的操作,那下面的语句就分别展示出来。

-- 按年产生连续的SELECT  substring(CONVERT(NVARCHAR(10), DateAdd(YEAR, number, '2016-01-01'),120),1,4) AS GroupDay,type FROM  master..spt_values WHERE type = 'p' AND number <= DateDiff(YEAR, '2016-01-01', '2019-01-01') -- 按月产生连续的SELECT  substring(CONVERT(NVARCHAR(10), DateAdd(MONTH, number, '2019-01-01'),120),1,7) AS GroupDay,type FROM  master..spt_values WHERE type = 'p' AND number <= DateDiff(MONTH, '2018-01-01', '2019-01-01') -- 按天产生连续的SELECT  CONVERT(NVARCHAR(10), DateAdd(day, number, '2019-01-01'),120) AS GroupDay,type FROM  master..spt_values WHERE type = 'p' AND number <= DateDiff(day, '2019-01-01', '2019-01-18') -- 按小时产生连续的SELECT  substring(convert(char(32),DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),120),1,16) AS GroupDay,type FROM master..spt_values WHERE type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),CONCAT('2019-01-18',' ', '23:00'))>=0-- 按分钟的就自己可以YY了......

四,与业务场景进行结合

有了连续的数据过后,当然就是以时间为主,进行左连接。就可以查出统计数据了。

下面我就说说我使用的两个统计案例(是采用存储过程来实现了,所以有@符号的是变量),给到大家,至于看不看得懂,就看你的能力了。

-- 按天统计交易笔数select a.GroupDay, ISNULL(b.e, 0) 'feeCount' from (   SELECT     CONVERT(NVARCHAR(10), DateAdd(day, number, @paySdate),120) AS GroupDay,type    FROM     master..spt_values    WHERE     type = 'p' AND number <= DateDiff(day, @paySdate, @payEdate)    ) a    left join     (select      convert(char(32),create_time,23) as d, count(*) as e     from      trade_log where create_time >= @paySdate and create_time<=@payEdate    group by convert(char(32),create_time,23)) b on b.d=a.GroupDay-- 按小时统计交易笔数select a.GroupDay, ISNULL(b.e,0) 'feeCount' from (    SELECT      substring(convert(char(32),DATEADD(HH,number,CONCAT(@paySdate,' ', @paySTime)),120),1,16) AS GroupDay,type     FROM      master..spt_values     WHERE      type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT(@paySdate,' ', @paySTime)),CONCAT(@payEdate,' ', @payETime))>=0     ) a     left join (    select      convert(char(32),create_time,23) as d, datepart(hh,create_time) as h,     substring(convert(char(32),DATEADD(HH,datepart(hh,create_time),convert(char(32),create_time,23)),120),1,16) as st,     count(*) as e     from      trade_log     where create_time >= @paySdate and create_time<=@payEdate      and convert(char(8),create_time,108)>=@paySTime and convert(char(8),create_time,108)<=@payETime     group by convert(char(32),create_time,23),datepart(hh,create_time)) b     on b.st=a.GroupDay order by GroupDay

五,总结及展望

掌握的知识点:

•熟悉了存储过程的语法和编写过程
•学习到了master..spt_values是什么?以及可以使用的场景?
•针对按时间进行统计,比如按天,小时进行统计的实现方法。

展望:

•局限性:这种方式目前只针对sqlserver, 但是目前大部分都是mysql。

ps:MySQL按天,按周,按月,按时间段统计

自己做过MySQL按天,按周,按月,按时间段统计,但是不怎么满意,后来找到这位大神的博客,转载一下,谢谢这位博主的分享

知识点:DATE_FORMAT

使用示例

select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days; select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select DATE_FORMAT(create_time,'%Y%m') months,count(caseid) count from tc_case group by months;

DATE_FORMAT(date,format)

根据format字符串格式化date值。下列修饰符可以被用在format字符串中:

•%M 月名字(January……December)
•%W 星
期名字(Sunday……Saturday)
•%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
•%Y 年, 数字, 4 位
•%y 年, 数字, 2 位
•%a 缩写的星期名字(Sun……Sat)
•%d 月份中的天数, 数字(00……31)
•%e 月份中的天数, 数字(0……31)
•%m 月, 数字(01……12)
•%c 月, 数字(1……12)
•%b 缩写的月份名字(Jan……Dec)
•%j 一年中的天数(001……366)
•%H 小时(00……23)
•%k 小时(0……23)
•%h 小时(01……12)
•%I 小时(01……12)
•%l 小时(1……12)
•%i 分钟, 数字(00……59)
•%r 时间,12 小时(hh:mm:ss [AP]M)
•%T 时间,24 小时(hh:mm:ss)
•%S 秒(00……59)
•%s 秒(00……59)
•%p AM或PM
•%w 一个星期中的天数(0=Sunday ……6=Saturday )
•%U 星期(0……52), 这里星期天是星期的第一天
•%u 星期(0……52), 这里星期一是星期的第一天
•%% 一个文字"%"。

关于"sqlserver/mysql如何按天、按小时、按分钟统计连续时间段数据"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

小时 时间 统计 数字 星期 时间段 数据 名字 天数 月份 知识 篇文章 过程 清楚 东西 场景 字符 字符串 就是 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 蓝思科技飞鸽互联网 智能科技公司是互联网公司吗 科技信息互联网 科技服务与互联网 华宇互联网科技 中国 科技 互联网 贷财互联网科技 互联网科技公司名称 互联网科技大会案例 成都仁贤领冠互联网科技有限公司 江苏南京365互联网科技 科技互联网的估值 互联网科技大赛获奖感言 互联网科技实习生岗位 杭州披云加互联网科技有限公司 江苏互联网科技小贷 广东鹅鹅鹅互联网科技有限公司 科技发展第三阶段互联网时代 株洲百竞科技的互联网营销顾问 互联网中国科技 互联网科技公司发展 成都仁贤领冠互联网科技有限公司 常德市电业局互联网科技部 崇明区互联网教育科技诚信经营 山东有哪些互联网科技公司 2021互联网科技公司排名 广州百诚互联网科技有限公司官网 扫呗互联网科技有限公司 中国主要互联网科技公司
0