Mysql查询时间段内数据

表如图,表名为demo,表为某库存量的实时更新表

主要数据为:time时间数据,amount库存量数据

Mysql查询时间段内的数据可以用between方法

select  amount
from demo
where time
between "2021-01-01 00:00:00" and "2022-01-01 00:00:00"

要注意的是between右边的数据如果相同,并不会统计在内,即开括号

如果需要的数据只精确到天,且参数无时分秒,会造成时间段末端数据丢失,即1月1号的数据并不会计算在内

可以用java的Calender进行扩大范围

Calendar gc = Calendar.getInstance();
Date a=productionParam.getEndtime();
gc.setTime(a);
gc.add(Calendar.DAY_OF_MONTH, 1 );
gc.add(Calendar.SECOND,-1);

将末端数据加一天,减1秒,即为“2022-01-01 23:59:59”,可以将1月1号的数据统计在内

对相同日期的数据进行处理

可以看出,第三条和第四条的日期(精确到天)是相同

处理可以分为两种情况,相加或选择其中一个

相加可以用sql的sum()函数和group by 

需要注意的是,由于两条数据时分秒不同,group by不能直接分组,可以用mysql的DATE_FORMAT进行格式处理后,再进行分组,由于格式化和分组不能同时,所以需要二次查询

select
time,sum(amount)
from(selectDATE_FORMAT(time, '%Y-%m-%d' ) AS time,amountfrom demo) as a
group by
a.time

相同日期选择其中一个

假设相同日期的数据只需要最新的那一条数据,可以使用mysql的MAX()方法

同样的,日期也需要格式化,并分组,但分组后amount的数据并不可控,而且最重要的是日期格式化后并不能分清,相同日期的数据中哪一条是最新的,即精确度丢失

所以需要用到 id字段,默认日期是按顺序插入的,即id也是按顺序排列,此时可以用左连接Right join实现该需求

select
id,
time,
amount
from demo
RIGHT JOIN (selectMAX(id) as idfrom(selectid,DATE_FORMAT(time, '%Y-%m-%d' ) AS time,amountfrom demo) as agroup bya.time ) as b
on id=b.id

再然后,在生产中

需求改变,需要反应时间段内的每一天库存量总和,用于统计或折线图

需要根据type类型的数据再次分类,且需要查询每一天的所有种类的库存量之和,

最重要的是有时间段的划分,但时间段之外的数据依然需要考虑(所有种类库存量的和),而且需要一个在时间段开始前的库存量初始值(折线图起点)

可以理解为

查询某一时间段的库存量,即amount,需要查询在时间段内的每一天的库存量总和,当天库存量总和为当天所有种类(type)的库存量的和,数据库的每一条数据为一种类的库存量的实时更新数据。

查询时,同一种类的数据在同一天出现时选取最新的数据,且,当查询出的库存量总和不在时间段的前端时,需要查询初始值,即时间段前的库存量总和,也就是当任何一种类的库存量不在时间段的前端时,需要查询时间段前的初始值并用于后续的库存量总和计算

这个时候,光用数据库查询,已经满足不了需求

我的解决方法是

查询出生产资料的所有type类型编号,逐个查询时间段前的类型初始值放在数组中,然后group by两个字段(time和type)分组,得到不同种类实时变化的数据,剔除同一种类在同一天变化的数据,最后根据查询出的日期,类型和库存量,不断替换数组内库存量值,进行计算

如果只用sql可以解决这个问题吗

Mysql查询时间段内数据,并处理相同日期或同类型的数据相关推荐

  1. mysql查询时间段内的数据

    mysql查询时间段内的数据 -- 今天 select fullName,addedTime from t_user where to_days(addedTime) <= to_days(no ...

  2. mysql查询时间段内所有日期 和 小时

    返回时间段内所有日期 天 select DATE_FORMAT(date_add('2022-06-01 00:00:00', interval row DAY),'%Y-%m-%d') date f ...

  3. mysql 查询时间之内_MySQL 查询时间段内的数据

    先来建表语句: SET FOREIGN_KEY_CHECKS=0;-- ---------------------------- -- Table structure fort_user-- ---- ...

  4. SQLServer 时间段分隔,时间段查询,查询时间段内的数据

    我们经常碰到需要查询时间段内的数据,以下函数能有所有帮助, 有了这个table后可以将需要分段查询的数据left join 关联该表, 然后就可以分组求和了,具体如何使用得看大家的情景 将一天的时间进 ...

  5. mysql select time,MySql查询时间段的方法

    本文实例讲述了MySql查询时间段的方法.分享给大家供大家参考.具体方法如下: MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考. MySql的时间字段有 ...

  6. mysql查询今天,昨天,近7天,近30天,本月,上一月数据

    近期项目中用到了查询当月数据记录的功能,最初的想法是在逻辑业务里构造好时间段进行查询,当写sql语句时感觉挺麻烦.所以就到网上搜索了一下,看看是不是能有简单的方法.果然.网络资源非常强大.以下结合我的 ...

  7. mysql 时间查询_两种常用MySql查询时间段的方法

    MySql查询时间段的方法很多,下面就为您介绍几种最常用的MySql查询时间段方法,如果您在MySql查询时间段方面遇到过问题,不妨一看. MySql的时间字段有date.time.datetime. ...

  8. Mysql查询获取过去一年,最后一天,每月,每月的数据

    Mysql查询获取过去一年,最后一天,每月,每月的数据 前言 今天博主将为大家分享Mysql查询获取过去一年,最后一天,每月,每月的数据,不喜勿喷,如有异议欢迎讨论! 锁的分类 在本MySQL教程中– ...

  9. mysql查询本周内每天统计量按天展示

    mysql查询本周内每天统计量按天展示 本周 SELECT b.item,IFNULL(a.COUNT,0) AS VALUE FROM (SELECT DATE(subdate(curdate(), ...

最新文章

  1. 关系数据库设计理论(函数依赖、异常、范式)、ER图
  2. MAC地址如何在windows与unix下查看?
  3. Spring AOP 实战运用
  4. iOS 设置系统音量和监听系统音量变化
  5. 转 c#读写xml文件
  6. python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...
  7. Realsense D435i 运行 Vins-fusion
  8. go语言 gosched
  9. 【转】Linux下软件安装的几种方式
  10. php 取oracle图片,一个php导出oracle库的php代码
  11. win10多合一原版系统_win10多合一原版系统
  12. MVC3.0+knockout.js+Ajax 实现简单的增删改查
  13. RapidMiner简单入门教程——入门必看超详细
  14. Python Pandas库教程
  15. ArcGIS中用数据生成线和面的方法
  16. 问题 F: 小明与隔壁老王之间不得不说的故事
  17. Android CPU 深度睡眠,处理器的深度和深度睡眠状态之间的差异
  18. 【数据架构系列-02】从《数据中台能力成熟度模型》的发布,聊聊火了的中台
  19. 通过读取csv/xml数据并且结合使用allure展示测试报告,验证开发中的add()和reduct()操作(在@allure.story分别实现相加减)
  20. 母牛的故事——无脑模拟解法

热门文章

  1. 王者nba服务器维护,王者NBA新手常用问题FAQ大全
  2. 2022/09/20、21 day09/10:JavaScript(三)
  3. 苹果cms播放器不能全屏播放解决方法
  4. 【VMware Fusion】如何配置VMware Fusion中的Vmnet网卡
  5. Primer Premierv6.24详细图文安装和破解教程
  6. 1033 旧键盘打字 (20 分)
  7. #displaytag:一个简易的Java分页插件(无需其他的前端分页插件) @FDDLC
  8. 聊聊前端开发日常的协作工具(全)
  9. 显著性检验,T-test,P-value
  10. 磁盘分析管理软件:Disk Space Analyzer Pro mac版