mysql – 选择按队列分组的过去几个月的用户活动
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 选择按队列分组的过去几个月的用户活动,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2805字,纯文字阅读大概需要5分钟。
内容图文
![mysql – 选择按队列分组的过去几个月的用户活动](/upload/InfoBanner/zyjiaocheng/896/066d7b2d11bd4c19a3c8f1f90e0eb621.jpg)
在MySQL 5.7中,我有一个表用户,其中包含已注册的列和lastLogin.我的目标是按照注册日历月对用户进行分组,然后为每个组选择在1个月后,2个月后仍有多少用户仍在使用,依此类推.
2015年6月已有20,000名用户注册,其中10,000名用户已于2015年7月或之后活跃,其中5,000名已于2015年8月或之后有效,等等.继续为过去几个月注册的所有用户输出此输出直至今天.
我了解如何手动选择任何活动月份,例如选择注册后一个日历月内活跃的所有用户:
SELECT year(registered), month(registered), count(id)
FROM user
WHERE lastLogin >= DATE_ADD(DATE_SUB(date(registered), INTERVAL DAYOFMONTH(registered) - 1 DAY), INTERVAL 1 MONTH)
GROUP BY year(registered), month(registered)
这将为我提供注册后一个月或之后活动的用户数量.
但此外,我还想选择在注册后2个月,注册后3个月等活动的用户数量,直到当月为止.
结果将是这样的(不一定看起来像这样,但它应该得到这个想法):
Columns: Cohort | total | 1 month | 2months | 3months | ... | month n
07/2015 | 20,000 | 10,100 | 5,500 | 2,600 | ... | 150
08/2015 | 21,000 | 9,800 | 4,300 | 1,300 | ... | 180
09/2015 | 19,700 | 11,400 | 6,200 | 3,500 | ... | 200
...
08/2017 | 25,300 | 13,000
09/2017 | 12,500
如何更改查询以选择所有月份的活动而不是特定月份?
解决方法:
在Rick的帮助下寻找数据透视表我能够创建最终查询,如本文所述:https://stackoverflow.com/questions/7674786/mysql-pivot-table
查询6个月的分析:
SELECT
YEAR(registered), MONTH(registered), COUNT(*) as total,
SUM(lastLogin >= DATE(registered) - INTERVAL DAYOFMONTH(registered) - 1 DAY + INTERVAL 1 MONTH) AS month1,
SUM(lastLogin >= DATE(registered) - INTERVAL DAYOFMONTH(registered) - 1 DAY + INTERVAL 2 MONTH) AS month2,
SUM(lastLogin >= DATE(registered) - INTERVAL DAYOFMONTH(registered) - 1 DAY + INTERVAL 3 MONTH) AS month3,
SUM(lastLogin >= DATE(registered) - INTERVAL DAYOFMONTH(registered) - 1 DAY + INTERVAL 4 MONTH) AS month4,
SUM(lastLogin >= DATE(registered) - INTERVAL DAYOFMONTH(registered) - 1 DAY + INTERVAL 5 MONTH) AS month5,
SUM(lastLogin >= DATE(registered) - INTERVAL DAYOFMONTH(registered) - 1 DAY + INTERVAL 6 MONTH) AS month6
FROM
user
WHERE
registered >= "2015-01-01"
GROUP BY YEAR(registered) , MONTH(registered)
部分DATE_SUB(DATE(已注册),INTERVAL DAYOFMONTH(已注册) – 1天)将返回一个月的第一天,以确保分析基于日历月.我不确定它是否可以简化.我在看STR_TO_DATE(LEFT(已注册,7),“%y-%m”)但我正在阅读Strings的工作速度较慢,应该避免.如果有人知道更好/更清洁的方式,请发表评论,我会将其包含在答案中.
以下是查询的一些示例输出:
year, month, total , month1, month2, month3, month4, month5, month6
'2015', '1', '14776', '4302', '3225', '2827', '2547', '2330', '2163'
'2015', '2', '12162', '3859', '2866', '2465', '2259', '2046', '1890'
'2015', '3', '10770', '3831', '2841', '2507', '2288', '2135', '1987'
'2015', '4', '15685', '3731', '2641', '2273', '2045', '1872', '1730'
'2015', '5', '18130', '3686', '2403', '1993', '1744', '1528', '1363'
内容总结
以上是互联网集市为您收集整理的mysql – 选择按队列分组的过去几个月的用户活动全部内容,希望文章能够帮你解决mysql – 选择按队列分组的过去几个月的用户活动所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。