我想计算一下,在记录的所有日期中,数据库每天会获得多少新的唯一用户.

如果我的表如下所示:

ID | DATE
---------
1  | 2022-05-21

1  | 2022-05-22
2  | 2022-05-22

1  | 2022-05-23
2  | 2022-05-23

1  | 2022-05-24
2  | 2022-05-24
3  | 2022-05-24

我希望结果如下所示:

DATE       | NEW UNIQUE IDs
---------------------------
2022-05-21 | 1
2022-05-22 | 1
2022-05-23 | 0
2022-05-24 | 1

查询,例如:

SELECT `date` , COUNT( DISTINCT id)
  FROM tbl
  GROUP BY DATE( `date` ) 

将返回每天的计数,不考虑前几天.

如有任何帮助,将不胜感激.

编辑:使用MySQL 8

推荐答案

当日期是该用户的最短日期时,该用户为新用户.

所以你需要

SELECT date, COUNT(new_users.id)
FROM calendar
LEFT JOIN ( SELECT id, MIN(date) date
            FROM test 
            GROUP BY id ) new_users USING (date)
GROUP BY date

calendar是带有所需日期列表的静态或动态生成的表.它甚至可以是SELECT DISTINCT date FROM test个子查询.

Mysql相关问答推荐

SQL查询仅插入5行

如何有效地计算共同的朋友/追随者?

使用JSON_CONTAINS搜索多个值的原理

发生的原因及解决方法

为什么 `count` 函数有效但 `sum` 无效?

关联同一个表中的两列

如何在 SQL 中计算留存曲线?

在表中找到最大值,然后分别显示SQL组和每个SQL组中的最大值计数

根据单个日期字段获取范围/天数

从多到多表中 Select 数据而无需重复

为什么在有 BEGIN 和 END 时为存储过程指定分隔符?

mysql从另一个表中 Select 不相等的值

判断一对记录是否属于多个组ID

MySQL使用多列 Select 重复记录

PHP 判断 NULL

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

MySQL:切换 int 字段值的简单方法

为什么 GRANT 在 MySQL 中不起作用?

SELECT INTO 和未声明的变量错误

MySql 两个时间戳之间的天数差异?