• 中文
    • 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.4k
  • llxzuishuaizjmarinasuccess。MI

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: