gpt4 book ai didi

mysql:每天获取新用户,按天累计总用户数

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

假设我有一个 mysql 表 t:

DateTime timestamp;
int userid;

而且我想知道一段时间内我的总用户数。我有这个:

2012-12-04 102
2012-12-05 101
2012-12-05 102
2012-12-05 103
2012-12-07 101
2012-12-08 104

所以第一次看到 101 是 12/5,第一次看到 104 是 12/7,以此类推。所以我想这样,对于按日期查看的总用户数:

2012-12-04 1
2012-12-05 3
2012-12-07 3
2012-12-08 4

(我不在乎那里是否有没有新条目的额外日期。)

我能得到的最接近的是每天的新用户数:

select distinct date, count(*) from 
(select MIN(DATE(timestamp)) date from t group by userid order by date) t1 \
GROUP BY date;

这似乎有效;子查询给出每个用户标识的最早时间戳,外部查询按日期组合。但是我怎样才能把它累加起来才能得到见过的总数呢?

哦,是的,我看了MySQL query - find "new" users per day但它似乎没有满足我的要求。

最佳答案

SELECT x.timestamp
, COUNT(DISTINCT y.userid)
FROM t x
JOIN t y
ON y.timestamp <= x.timestamp
GROUP
BY timestamp;

GaryO,要理解它为什么有效,只需这样重写它...

SELECT DISTINCT x.timestamp, y.userid
FROM t x
JOIN t y
ON y.timestamp <= x.timestamp
ORDER
BY x.timestamp
, y.userid;

使用 sgeddes 的 sqlfiddle,这给了我们以下中间结果:

+---------------------+--------+
| timestamp | userid |
+---------------------+--------+
| 2012-12-04 00:00:00 | 102 |
| 2012-12-05 00:00:00 | 101 |
| 2012-12-05 00:00:00 | 102 |
| 2012-12-05 00:00:00 | 103 |
| 2012-12-07 00:00:00 | 101 |
| 2012-12-07 00:00:00 | 102 |
| 2012-12-07 00:00:00 | 103 |
| 2012-12-08 00:00:00 | 101 |
| 2012-12-08 00:00:00 | 102 |
| 2012-12-08 00:00:00 | 103 |
| 2012-12-08 00:00:00 | 104 |
+---------------------+--------+

所以在最后的查询中,我们所做的就是计算按日期分组的结果。

关于mysql:每天获取新用户,按天累计总用户数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693941/

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