热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一段时间内统计分析数据查询sql实现

一段时间内统计分析数据查询sql实现最近在做一个关于统计分析的功能,需求是将最近一周的数据统计出来并使用折线图展示。1.循环计算一周之内的日期最先想到就是这种方法&#
一段时间内统计分析数据查询sql实现

最近在做一个关于统计分析的功能,需求是将最近一周的数据统计出来并使用折线图展示。


1. 循环计算一周之内的日期

最先想到就是这种方法,但是这种方法查询数据库次数多,效率低。舍弃。

2.使用group子句以及mysql日期函数

这种方法只需查询一次,效率高,看着比较优雅。具体参考下面代码:

/*** 查询一周之内的增加的积分或者减少的积分* * @return*/public List listAccSumByweek(String type){String hql="select sum (t.dealAmount),DATE_FORMAT(t.createTm,'%Y%m%d')"+ " from AccPointsDetails as t where TIMESTAMPDIFF(WEEK,t.createTm,?)=0"+ " and t.dealType =? group by DATE_FORMAT(t.createTm,'%Y%m%d') ";return findArray(hql, new Timestamp(System.currentTimeMillis()),type);}

3. 计算任意时间段内的统计数据

基于第二种方法,稍作修改即可实现,示例代码如下:


/*** 查询一周之内的增加的积分或者减少的积分* type PointsRuleConstant.POINTS_ADD or PointsRuleConstant.POINTS_MINUS* @return*/
public List listAccSumByweek(long startTimestamp, long endTimestamp,String type){String hql&#61;"select sum (t.dealAmount),DATE_FORMAT(t.createTm,&#39;%Y-%m-%d&#39;)"&#43; " from AccPointsDetails as t where TIMESTAMPDIFF(DAY,t.createTm,?)<&#61;0"&#43;" and TIMESTAMPDIFF(DAY,t.createTm,?)>&#61;0"&#43; " and t.dealType &#61;? group by DATE_FORMAT(t.createTm,&#39;%Y-%m-%d&#39;) ";return findArray(hql,new Timestamp(startTimestamp),new Timestamp(endTimestamp),type);
}public List findArray(final String hql, final Object... values) {return createQuery(hql, values).list();
}

下面是代码出现的mysql日期函数的解释,官方文档

TIMESTAMPADD(unit,interval,datetime_expr)

Adds the integer expression interval to the date or datetime expression datetime_expr. The unit for interval is given by the unit argument, which should be one of the following values: MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.

The unit value may be specified using one of keywords as shown, or with a prefix of SQL_TSI_. For example, DAY and SQL_TSI_DAY both are legal.

mysql> SELECT TIMESTAMPADD(MINUTE,1,&#39;2003-01-02&#39;);-> &#39;2003-01-02 00:01:00&#39;
mysql> SELECT TIMESTAMPADD(WEEK,1,&#39;2003-01-02&#39;);-> &#39;2003-01-09&#39;

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Returns datetime_expr2 − datetime_expr1, where datetime_expr1 and datetime_expr2 are date or datetime expressions. One expression may be a date and the other a datetime; a date value is treated as a datetime having the time part &#39;00:00:00&#39; where necessary. The unit for the result (an integer) is given by the unit argument. The legal values for unit are the same as those listed in the description of the TIMESTAMPADD() function.

mysql> SELECT TIMESTAMPDIFF(MONTH,&#39;2003-02-01&#39;,&#39;2003-05-01&#39;);-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,&#39;2002-05-01&#39;,&#39;2001-01-01&#39;);-> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,&#39;2003-02-01&#39;,&#39;2003-05-01 12:05:55&#39;);-> 128885



推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在MySQL8.0中如何查看性能并解析SQL执行顺序。首先介绍了查询性能工具的开启方法,然后详细解析了SQL执行顺序中的每个步骤,包括from、on、join、where、group by、having、select distinct、union、order by和limit。同时还介绍了虚拟表的概念和生成过程。通过本文的解析,读者可以更好地理解MySQL8.0中的性能查看和SQL执行顺序。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
author-avatar
圣换少爷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有