gpt4 book ai didi

mysql - SQL 中的保留群组查询

转载 作者:行者123 更新时间:2023-11-29 22:06:55 25 4
gpt4 key购买 nike

我有一个如下所示的表格:

+---------+------------+----------+
| User_id | start_date | end_date |
+---------+------------+----------+
| 123 | 1/1/2015 | 3/1/2015 |
| 234 | 1/1/2015 | 1/1/2015 |
| 345 | 2/1/2015 | 3/1/2015 |
| 456 | 3/1/2015 | 3/1/2015 |
| : | | |
| : | | |
+---------+------------+----------+

输出应该是:

Months_since_live

+-------------+---+---+---+---+
| | 0 | 1 | 2 | 3 |
+-------------+---+---+---+---+
| Jan_signups | 2 | 1 | 1 | 0 |
| Feb_signups | 1 | 1 | 0 | |
| Mar_signups | 1 | 0 | | |
| : | | | | |
| : | | | | |
+-------------+---+---+---+---+

最佳答案

对于输出来说,这通常不是一个很好的格式,因为您必须为要跟踪数据的每个新保留长度添加一个新列。例如如果在四月份您想查看一月份的注册人数仍然存在,则必须在输出中添加“4”列。

更好的输出是month_of_signup、months_active、users_retained(计数),然后您就可以转向您想要的内容。

如果您需要将 start_date 聚合为月份或将其转换为字符串,您可以将其添加到选择和分组依据中。

如果您确实想要原始输出:

select concat(date_format(start_date, '%b'),'_signups') as month,
sum(if(timestampdiff(month, start_date, end_date) >= 0, 1, 0) as '0',
sum(if(timestampdiff(month, start_date, end_date) >= 1, 1, 0) as '1',
sum(if(timestampdiff(month, start_date, end_date) >= 2, 1, 0) as '2',
sum(if(timestampdiff(month, start_date, end_date) >= 3, 1, 0) as '3'
from your_table
group by month

但是,当明年到来并且您的表格中有两个一月时,这将变得非常令人困惑。我建议将年份添加到您的输出和聚合中。

关于mysql - SQL 中的保留群组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com