各位大神帮帮忙:Mysql根据选定时间范围,统计选定时间范围内每天前7日的各天用户和

ddzzpp123 2018-08-15 01:34:45
可能标题说的不够明确,有一张表(active_user_day)字段是,id,version,channel,users(用户数),daytime。
现在需求是根据选定的时间范围,求出选定时间范围内每天的前7日的用户数总和。
举个例子:比如时间范围是2018-07-01至2018-07-10,那么根据规则查询出来结果就是2018-07-01前7日的和、2018-07-02前7日的和、2018-07-03前7日的和......2018-07-10前7日的和。
查询出来的应该是这样的结果。
daytime SUM(users)
2018-07-01,2018-07-01前7日总和
2018-07-02,2018-07-02前7日总和
......
2018-07-10,2018-07-10前7日总和
但是我实在不知道该怎么进行分组求和,想了好几天始终是绕不出来,求大神帮帮忙啊,指定一下
...全文
300 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘祥y 2018-08-16
  • 打赏
  • 举报
回复
第一次用这个CSDN,不知道怎么弄。我自己建了一个测试表,这段代码没有问题,你可以根据自己的需求修改时间就行。
SELECT
B.daytime,
SUM(users) FROM active_user_day A
JOIN
(select replace(DATE_SUB(daytime,interval 7 day),'-','')daytime_,daytime from active_user_day)B
WHERE B.daytime between '20180810' and '20180817' AND A.daytime BETWEEN B.daytime_ AND B.daytime GROUP BY B.daytime;
楓VS痕 2018-08-15
  • 打赏
  • 举报
回复
引用 3 楼 ddzzpp123 的回复:
[quote=引用 1 楼 xiewu91124 的回复:]
可以写个存储过程得到你要的结果

大佬,如果不用存储过程,只通过SQL能实现吗?[/quote]


select a.daytime,(select sum(users) from active_user_day where daytime between (a.daytime - interval 7 day) and (a.daytime - interval 1 day)) as count_user
from active_user_day a
where a.daytime >= '2018-07-01' and a.daytime <= '2018-07-10'

ddzzpp123 2018-08-15
  • 打赏
  • 举报
回复
引用 1 楼 xiewu91124 的回复:
可以写个存储过程得到你要的结果

大佬,如果不用存储过程,只通过SQL能实现吗?
楓VS痕 2018-08-15
  • 打赏
  • 举报
回复

DROP TABLE IF EXISTS active_user_day_1;
CREATE TABLE active_user_day_1(`sum_users` int(11) DEFAULT NULL, `daytime` date DEFAULT NULL);

DROP PROCEDURE IF EXISTS test_test;
CREATE PROCEDURE test_test ()
BEGIN
DECLARE daytime_1 DATE DEFAULT '2018-07-01'; -- 开始时间

WHILE daytime_1 <= '2018-07-10' -- 结束时间
DO
insert into active_user_day_1(sum_users, daytime)
select SUM(a.users),a.days from (
select users,daytime_1 days from active_user_day where daytime >= date_sub(daytime_1, interval 7 day) and daytime < daytime_1 ) a;
SET daytime_1 = date_add(daytime_1, interval 1 day);
END WHILE ;
COMMIT;
END;

CALL test_test();

SELECT * FROM active_user_day_1;
楓VS痕 2018-08-15
  • 打赏
  • 举报
回复
可以写个存储过程得到你要的结果

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧