表TESTER

字段:id  -- INT

     date  -- TIMESTAMP

  

1、如何按年、月、日分组查询?

select DATE_FORMAT(date,'%Y-%m-%d') time, count(*) count from TESTER group by year(date), month(date), day(date);

其中year()、month()、day()分别是提取date中的年、月、日字段。

2、时间分组查询的效率?

  在不建立索引时,我100W行数据进行测试,用了以下几种写法,得到性能:

  NO INDEX   select DATE_FORMAT(date,'%Y-%m-%d') time,count(*) count from TESTER group by time                      returned in 1.315 sec
  NO INDEX   select DATE_FORMAT(date,'%Y-%m-%d') time,count(*) count from TESTER group by year(time),month(time),day(time)   returned in 1.045 sec
  NO INDEX   select DATE_FORMAT(date,'%Y-%m-%d') time,count(*) count from TESTER group by year(date),month(date),day(date)   returned in 0.624 sec

  

  很明显,直接使用date字段是最优的。在建立索引后:

  INDEX ON date  select DATE_FORMAT(date,'%Y-%m-%d') time,count(*) count from TESTER group by year(date),month(date),day(date)    returned in 0.578 sec

  发现与不建索引时差别不算太大,不过当数据量达到千万级别是,提升还是很可观的。

3、如果需要返回Unix时间怎么做?

  测试在无索引模式下进行:
  返回秒:  select UNIX_TIMESTAMP(DATE_FORMAT(date,'%Y-%m-%d')) time,count(*) count from svndb.TlocTask group by year(date),month(date),day(time)      returned in 0.640 sec
  返回毫秒: select UNIX_TIMESTAMP(DATE_FORMAT(date,'%Y-%m-%d'))*1000 time,count(*) count from svndb.TlocTask group by year(date),month(date),day(time)   returned in 0.640 sec

  可见,性能还是不错的,可以不用拉到后台去计算。

4、关于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),   这里星期一是星期的第一天    
  %%     一个文字“%”。

5、MySQL中时间能直接相减吗?

  答案是否定的,比如表中有time1、time2两个字段,都是时间类型,想算它们之间的差别(秒为单位)

  time1=2014-01-01

  time2=2014-01-02

  当使用这个判断条件 where (time2 - time1 > 36)时,就会踩坑,MySQL并不会把真正的时间相减,而是拼接起来组成字符串相减 '20140101' - '20140102',这个结果是没有实际意义的。

  那么当想要算时间差时,有如下三种方法:

  TIME_TO_SEC(TIMEDIFF(t2, t1))

  TIMESTAMPDIFF(second, t1, t2)   -- 注意,这里t1在前

      UNIX_TIMESTAMP(t2) - UNIX_TIMESTAMP(t1)
  就能得到t2-t1的正确时间差,单位为秒。
 
6、一个tips:js字符串型的时间格式怎么转为Date?
  要用2014/10/13 00:00:00或2014/10/13 0:0:0或2014/10/13这样的格式才能正确完成,如new Date('2014/10/13'),否则在IE浏览器下,会得到的错误的转换结果。
  

  好了,这次的博客比较短,采用了问答的形式,看看效果吧。

  转载请注明原址:http://www.cnblogs.com/lekko/p/4023113.html

MySQL时间分组查询的更多相关文章

  1. mysql按照时间分组查询

    mysql 按年.月.周.日分组查询 1.按照年份分组查询 SELECT DATE_FORMAT(t.bill_time,'%Y') month_time,sum(t.pay_price) total ...

  2. Mysql按时间段分组查询

    Mysql按时间段分组查询来统计会员的个数,mysql个数 Mysql按时间段分组查询来统计会员的个数,mysql个数 1.使用case when方法(不建议使用)- 代码如下 复制代码SELECT ...

  3. mysql 分组查询问题 group_concat

    这几天在做购物车的时候.购物车内的商品为一个商品占一行,结果再从数据库读出的时候,没有分组,而是循环所有的内容出来,然后进行判断.如果一样的话就把他保存到一个变量中.但是自己逻辑没搞清楚.一直出bug ...

  4. (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)

    一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...

  5. MySQL全面瓦解10:分组查询和聚合函数

    概述 相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位):或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估). ...

  6. Mysql 连续时间分组

    该方案:不限于本例的时间连续,也可适用于其他按连续分组. 连续条件 分组这问题困扰了很久,之前觉得在SQL上很难处理,都是在程序上做处理.后面实在有太多这需求了,所以只能想办法在SQL上处理了. 如下 ...

  7. Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

  8. MySQL分组查询与连接查询

    一,分组查询 使用ORDER BY子句将表中的数据分成若干组(还是按行显示) 语法: SELECT 字段名[,聚集函数] FROM 表名 [WHERE子句] GROUP BY 要分组的字段名 [ORD ...

  9. mysql系列九、mysql语句执行过程及运行原理(分组查询和关联查询原理)

    一.背景介绍 了解一个sql语句的执行过程,了解一部分都做了什么,更有利于对sql进行优化,因为你知道它的每一个连接.where.分组.子查询是怎么运行的,都干了什么,才会知道怎么写是不合理的. 大致 ...

随机推荐

  1. spider RPC入门指南

    本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...

  2. 《如何使用Javascript判断浏览器终端设备》

    WEB开发中如何通过Javascript来判断终端为PC.IOS(iphone).Android呢? 可以通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. va ...

  3. 当我们在谈论kmeans(1)

    本稿为初稿,后续可能还会修改:如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/ 简书:建设中... 知乎:建设中... 当我们在谈论 ...

  4. Dancing Links and Exact Cover

    1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...

  5. 轻量级的日期插件--datebox

    jquery的日期插件有好几款,H5中的input也可以自带日期选择.但为什么要再写一个,有两个理由,一个是引用的文件太大,而有时候只需要很简单的功能,二个是想加一些自定义的效果不好改. 我写的这个功 ...

  6. EasyPR--开发详解(8)文字定位

    今天我们来介绍车牌定位中的一种新方法--文字定位方法(MSER),包括其主要设计思想与实现.接着我们会介绍一下EasyPR v1.5-beta版本中带来的几项改动. 一. 文字定位法 在EasyPR前 ...

  7. ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之22.ABP展现层——导航栏设置 ABP是“ASP.NET Boilerplate Project (ASP.NE ...

  8. ABP框架 - 多租户

    文档目录 本节内容: 什么是多租户 多部署 - 多数据库 单部署 - 多数据库 单部署 - 单数据库 单部署 - 混数据库 多部署 - 单/多/混 数据库 ABP中的多租户 启用多租户 宿主与租户 会 ...

  9. Javascript 相关文章 —— 性能

    在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 概览 无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaS ...

  10. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...