• 中文
    • English
  • 注册
  • 查看作者
    • Mysql中如何按年、月、周、日、小时、分查询分组等

      一.  前言

      最近在做公司一个后台管理项目的数据分析,经常需要根据数据表中的时间字段做一些条件判断,这里将常用的sql整理如下,如果你的数据表中关于时间的字段是Date或者Timestamp,那么直接复制以下sql就可以使用,如果你的时间字段是int类型,那么记得需要先用FROM_UNIXTIME(时间字段)转化

      二. 时间段选择

      查询当天的记录:

      SELECT * FROM 表名 WHERE  to_days(时间字段) = to_days(now())

      查询昨天的记录:

      SELECT * FROM 表名 WHERE  DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= date(时间字段)

      查询最近一周(7天)记录:

      SELECT * FROM 表名 WHERE  DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段)

      查询最近n天的记录:

      SELECT * FROM 表名 WHERE  DATE_SUB(CURDATE(), INTERVAL n DAY) <= date(时间字段)

      查询最近n月的记录:

      SELECT * FROM 表名 WHERE  DATE_SUB(CURDATE(), INTERVAL n MONTH) <= date(时间字段)

      查询当月的记录:

      SELECT * FROM 表名 WHERE  DATE_FORMAT( 时间字段, '%Y-%m' ) = DATE_FORMAT( CURDATE( ) , '%Y-%m')

      查询今年的记录:

      SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW())

      查询某个时间段的记录:

      SELECT * FROM 表名 WHERE 时间字段 >= '2019-12-20 00:00:00' AND 时间字段 <=  '2019-12-21 29:59:59'

      三. 按时间分组

      所有时间按n分钟分组:

      SELECT * FROM 表名 GROUP BY 
      DATE_FORMAT(CONCAT(DATE(时间字段), ' ', HOUR(时间字段), ':',
      FLOOR(MINUTE(时间字段) / n) * n), '%H:%i')

      所有的记录按照小时分组:

      SELECT * FROM 表名 GROUP BY  DATE_FORMAT(时间字段,'%H')

      所有的记录按照天分组:

      SELECT * FROM 表名 GROUP BY DATE_FORMAT(时间字段,'%m-%d')

      所有的记录按照月分组:

      SELECT * FROM 表名 GROUP BY  DATE_FORMAT(时间字段,'%Y-%m')

      所有的记录按照年分组:

      SELECT * FROM 表名 GROUP BY DATE_FORMAT(时间字段,'%Y')

    • 0
    • 0
    • 0
    • 4.1k
    • llxzuishuaizjmarinasuccess。MI

      请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: