我有两张table(简化为):
+----------------+
| attendances |
+-----+----------+
| int | user_id |
+-----+----------+
| int | event_id |
+-----+----------+
+-------------------------+
| events |
+------+------------------+
| int | id |
+------+------------------+
| date | performance_date |
+------+------------------+
还有一个简单的查询:
SELECT count(DISTINCT user_id), events.performance_date
FROM attendances
INNER JOIN events
ON event_id = events.id
GROUP BY performance_date
我只想数一数 user_id
一次,但上面的查询只从每个 performance_date
(允许它们跨多个日期复制)。
是否有一个查询可以从整个结果集中删除重复的用户ID,并且只包括第一次出现的(按日期)?我怀疑这不可能。
输入/输出示例:
如果用户在2010年10月10日和2010年10月11日参加了一次活动,那么结果将是:
1, 2010-10-10
不是:
1, 2010-10-10
1, 2010-10-11
或:
2, 2010-10-10
如果在上面添加了另一个用户,并且他们在2010-10-10和2010-10-12参加了会议,那么结果将是:
2, 2010-10-10
1, 2020-10-12
正如我所说,这可能是不可能的。实际的产出并不是严格意义上的重要——只要能够以某种方式得出参加某一特定表演的人数。
这些数据将用于构建一个按事件统计的唯一用户数量增长的累积图。
2条答案
按热度按时间dfddblmv1#
如果需要每个用户的最早日期,可以使用聚合:
实际上,您可能要查找直方图,即每个最早事件日期的用户数。您可以通过添加另一个聚合级别来实现这一点:
hjzp0vay2#
如果要统计每个事件的所有新用户,可以使用以下查询:
我用以下一组测试了它:
结果是