场景一:表中时间类型为datetime,统计一天中每小时内的人数。
SELECT
<span style="white-space:pre"> </span>DATE_FORMAT(login_time, '%H') time,
<span style="white-space:pre"> </span>count(DISTINCT(login_name)) countUser,
<span style="white-space:pre"> </span>count(login_name) countUserTotal
FROM
<span style="white-space:pre"> </span>login_log l
WHERE
<span style="white-space:pre"> </span>1 = 1
GROUP BY
<span style="white-space:pre"> </span>HOUR (login_time);
-- 或者
SELECT
<span style="white-space:pre"> </span>DATE_FORMAT(login_time, '%H') time,
<span style="white-space:pre"> </span>count(DISTINCT(login_name)) countUser,
<span style="white-space:pre"> </span>count(login_name) countUserTotal
FROM
<span style="white-space:pre"> </span>login_log l
WHERE
<span style="white-space:pre"> </span>1 = 1
GROUP BY
<span style="white-space:pre"> </span>DATE_FORMAT(login_time, '%H');
1、DATE_FORMAT(date,format) :格式化日期,第一个为日期,第二个为要格式化的形式(规则参考点击打开链接)。
2、count(DISTINCT(login_name)) :根据登陆的用户名统计用户数,同一用户去重。
3、count(login_name) :登陆人次,同一用户不去重。
4、where 1=1 :这样就不用判断后面加条件时候用“where”还是“and”,直接加条件的话就用“and”。
5、HOUR(time) :返回时间的小时部分,返回值的范围为0至23小时的小时值。
场景二:表中时间为datetime,按天统计人数。
同上,只需要把最后HOUR()改为DAY()。
场景三:表中时间为datetime,获取某字段的每一天的和,以每一天为基准7天的和
SELECT
DATE_FORMAT(a.create_date, '%Y-%m-%d') countDate,
(
SELECT
sum(count)
FROM
statistics_user_active
WHERE
create_date BETWEEN (DATE_FORMAT(a.create_date, '%Y-%m-%d') - INTERVAL 0 DAY)
AND a.create_date
-- and condition_from = 'wonders'
-- and condition_user_type = 1
) AS dau,
(
SELECT
sum(count)
FROM
statistics_user_active
WHERE
create_date BETWEEN (DATE_FORMAT(a.create_date, '%Y-%m-%d') - INTERVAL 6 DAY)
AND a.create_date
-- and condition_from = 'wonders'
-- and condition_user_type = 1
) AS wau
FROM
statistics_user_active a
where 1=1
-- and condition_from = 'wonders'
-- and condition_user_type = 1
group by DATE_FORMAT(a.create_date, '%Y-%m-%d')
;
-- --------------------------
select date_sub(curdate(),interval 6 day);
1、
SELECT
sum(count)
FROM
statistics_user_active
WHERE
create_date BETWEEN (DATE_FORMAT(a.create_date, '%Y-%m-%d') - INTERVAL 6 DAY)
AND a.create_date
sum()求和,筛选条件为between 每一天往前6天 and 今天 2、select A.a, A.b,(select ......) as wau from ABC A
3、还有其他字段,例如condition_from表明来源,如果要通过来源筛选的话要在“() as”的括号中也加上筛选条件
4、“INTERVAL”,可以用来获取某天日期,例如“这周第一天”,“这月最后一天”,“下月第一天”等等。