在工作中,我们有时候会出现根据两个时间,求出来两个时间之间每个月的数据数量,多用于给折线图、柱状图提供数据的情景,之前遇到过一次,找到了一个比较好的处理方法,只需要使用sql语句就可以实现了。

我们最终需要给如下图供数据:

组件要求提供的数据模型如下图:

我们已单表为例,时间字段为alarm_time ,然后根据该字段的时间,计算出当年每个月有多少条数据,上sql。感觉想法不错,将alarm_time 格式化为只有月,然后再根据这个月进行分组,结合聚合函数直接就可以达到效果!

SELECT to_char(alarm_time,'YYYY-MM'),count( 1 )
FROMalarm_record
WHEREalarm_time > to_date ( '2019-10', 'YYYY-MM' ) AND alarm_time < to_date ( '2020-09', 'YYYY-MM' ) GROUP BY  to_char(alarm_time,'YYYY-MM')ORDER BY to_char(alarm_time,'YYYY-MM')

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

优化:

上边的sql查询时,如果某个月每月没有数据,则最终查询出来时这个月也没有值,效果是如下图:

如上,查询结果中没有2020-05的数据,而我们现在需求一般都要求没有数据的月份应该是显示0,我们将sql修改为如下后即可

实现如果某个月没有数据,则也能查询出该月份,并且数量为0,如下:

Postgresql写法如下:

SELECTmonthdate,count( b.* )
FROM(
SELECTto_char ( date, 'YYYY-MM' ) AS monthdate
FROMgenerate_series ( date_trunc ( 'month', to_date ( '201910', 'yyyymm' ) ),date_trunc ( 'month', to_date ( '202009', 'yyyymm' ) ), '1 month' ) AS time( date ) ) aLEFT JOIN alarm_record b ON monthdate = to_char ( b.alarm_time, 'YYYY-MM' )
GROUP BYmonthdate
ORDER BYmonthdate

Mysql写法如下:

SELECTmonth,count( b.* )
FROM(SELECTconcat( DATE_FORMAT( m1, '%m' ), "月" ) as month
FROM(SELECTCONCAT(YEAR ( now( ) ),'-01-01') + INTERVAL m MONTH AS m1 FROM(SELECT@rownum := @rownum + 1 AS m FROM( SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) t1,( SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) t2,( SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) t3,( SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ) t4,( SELECT @rownum :=- 1 ) t0 ) d1 ) d2
WHEREm1 <= now( )
ORDER BYm1) aLEFT JOIN alarm_record b ON month = date_format( b.alarm_time, '%Y-%m' )
GROUP BYmonth
ORDER BYmonth

#@lehao#

帮助到您请点赞关注收藏谢谢!!

sql实现查询两个时间之间每月的数量相关推荐

  1. SQL查询两个时间交集区的多种方法

    SQL查询两个时间交集区 **1** SELECT * FROM t_work_sheet WHERE plan_end_date >= '2021-06-28' AND plan_start_ ...

  2. 计算两个时间之间的工作时长

    计算两个时间之间的工作时长(小时)排除周末 package com.test;import org.apache.commons.lang3.time.DateUtils;import java.ma ...

  3. MySQL如何查询两个日期之间的记录

    MySQL中,如何查询两个日期之间的记录,日期所在字段的类型为 datetime(0000-00-00 00:00:00) 解决方案: 直接使用 > <= 就可以查询. where cre ...

  4. python时间差转换成天数_Python实现计算两个时间之间相差天数的方法

    本文实例讲述了Python实现计算两个时间之间相差天数的方法.分享给大家供大家参考,具体如下: #-*- encoding:UTF-8 -*- from datetime import date im ...

  5. 两个时间之间是多少小时_那是两个小时我不会回来

    两个时间之间是多少小时 正如我之前关于linting主题所说的 ,花时间修改代码的好处很有限,因为自动工具告诉您这样做. 更糟糕的是,这些工具并非万无一失. 例如,我们一直在针对完美无害的try-wi ...

  6. js获取传统节假日_js 两个时间之间工作日的计算问题(包含节假日)

    后端用vue写点前端代码,也是罪过...嗷嗷嗷  行吧 项目需求描述:需要对时间控件里面的两个时间计算出相隔多少个工作日(包含节假日),由于节假日每年都不确定.保证项目能够正常使用,录用了2018年和 ...

  7. 怎样计算两个时间之间的间隔

    怎样计算两个时间之间的间隔 1. 怎样计算两个时间之间的间隔? 间隔=Date1.getTime()-Date2.getTime();得出来的是毫秒数. 除1000是秒,再除60是分,再除60是小时. ...

  8. Mysql-计算两个时间之间的差值

    计算两个时间之间的差值 1.datediff()计算date差值 2.timediff()计算时分秒差值 3.timestampdiff()计算指定维度的时间差值 1.datediff()计算date ...

  9. c# 获取两个时间之间的时间差

    c# 获取两个时间之间的时间差(时.分.秒) public static string GetTime(DateTime timeA){//timeA 表示需要计算DateTime timeB = D ...

  10. MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

    计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() 实现. 函数 TimeStampDiff() 是MySQL本身提供的 ...

最新文章

  1. Python中的字符串操作总结(Python3.6.1版本)
  2. 判断多边形边界曲线顺/逆时针
  3. VS2012 生成项目报 Lc.exe已退出,代码为-1 错误
  4. 关于宿主机没有Vmware虚拟网卡的问题分析与解决
  5. mysql控制台导出查询结果_MySQL 命令行导出、导入Select 查询结果
  6. 随谈---------多年之后,我又回来了
  7. 嵌入式端的神经网络算法部署和实现综合
  8. 最全NISP二级习题汇总
  9. qq无法启动此程序计算机中丢失dll,Win7系统打开QQ提示丢失DLL文件怎么办
  10. 中企海外周报 | 中国品牌闪耀亮相2019 IFA
  11. 关于Windows10 VT虚拟化无法开启
  12. python中的screen blit_什么是python中的surface.blit()函数?它有什么作用?这个怎么运作?...
  13. 启用计算机的无线同屏,Windows10如何使用无线同屏功能?
  14. android airplay音乐播放器,您需要知道的关于使用AirPlay播放音乐的一切 | MOS86
  15. matlab 端点检测 能零比法_基于短时能量与过零率的端点检测的matlab分析
  16. docker里面安装supervisor
  17. 我学习从事项目经理第三课
  18. UNI-APP,推广二维码页面实现
  19. Android 与 H5 数据的传递
  20. selenium中拖动鼠标通过滑动验证码(geetest)验证

热门文章

  1. PHP8.0尝鲜系列(一):Windows 10安装PHP8.0
  2. 几个不常见但非常出色的 .NET 开源库
  3. 编程中,有哪些好的习惯一开始就值得坚持?
  4. 黑马程序员——多态和抽象类的相关知识
  5. 【OpenCV】计算两幅图片视觉差
  6. word插入分隔符的方法
  7. 魔兽世界插件开发-暴雪插件源代码
  8. html网页怎么弄背景 图片,在html网页中如何设置背景图片?网页背景怎么设置?...
  9. 大数据分析-第九章 知识图谱
  10. 蓝桥杯练习题 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。