一. 前言
最近在做公司一个后台管理项目的数据分析,经常需要根据数据表中的时间字段做一些条件判断,这里将常用的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')
请登录之后再进行评论