select
uid
,CASE WHEN HOUR(subscribe_time) BETWEEN 0 AND 1 THEN '00:00:00'
WHEN HOUR(subscribe_time) BETWEEN 2 AND 3 THEN '02:00:00'
...
ELSE '23:00:00' END -- 生成时间分层部分,insert前外层sql加上日期后作为唯一的时间值
,COUNT(*)
FROM yht_fans WHERE subscribe_time>=UNIX_TIMESTAMP(CURDATE()) and subscribe_time<=UNIX_TIMESTAMP(CURDATE())+86400
GROUP BY 1,2
可以借助于mysql的日期函数,这里提供下SQL的思路:SELECT u.hour,
COUNT(*)
FROM (SELECT 获取create_time的小时部分 AS hour
FROM user
WHERE 获取create_time的日期部分 = 某个日期) u
GROUP BY u.hour
具体的mysql日期函数可以查一下API。
这个要有个前提的要求你那个 MySQL 里面, time 那一列的数据类型, 是 DATETIME 或者 TIME
如果数据类型是 DATE , 那就彻底没办法了:
注:MySQL 日期时间数据类型
DATE
日期。支持的范围为’1000-01-01’到’9999-12-31’。
MySQL以’YYYY-MM-DD’格式显示DATE值,但允许使用字符串或数字为DATE列分配值。
DATETIME
日期和时间的组合。
支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。
MySQL以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。
TIME
时间。范围是’-838:59:59’到’838:59:59’。
MySQL以’HH:MM:SS’格式显示TIME值,但允许使用字符串或数字为TIME列分配值。
SQL 语句的 WHERE 部分可以这么写
WHERE
Hour( time ) = 1
OR ( Hour( time ) = 2 ANDMINUTE( time) = 0 AND Second (time ) = 0 )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)