【发布时间】:2020-11-14 19:42:55
【问题描述】:
我有两张表(简化为):
+----------------+
| 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 中的重复项(允许它们在多个日期重复)。
是否有一个查询可以从整个结果集中删除重复的 user_ids,并且只包括第一次出现(日期方面)?我怀疑这可能是不可能的。
输入/输出示例:
如果用户在 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
正如我所说,这可能是不可能的。实际输出并不重要——只要能够以某种方式得出参加特定表演的独特人数即可。
这些数据将用于构建按事件划分的唯一用户数量增长的累积图表。
【问题讨论】:
标签: mysql sql join greatest-n-per-group min