我有一个表,其中包括每个注册用户已经完成的比赛。这个表可以有一个用户注册许多比赛随着时间的推移。
它由user_id、tournament_id和created_at日期字段组成
我需要看到每个用户的第一场比赛。
我尝试了以下方法:
SELECT user_id, MIN(created_at) AS first_participation_date, tournament_id
FROM participant_status
GROUP BY user_id, tournament_id
ORDER BY user_id, first_participation_date ASC;
但是在两个ID上分组会给予我重复的用户观察。
2条答案
按热度按时间vwkv1x7d1#
一个
FIRST_VALUE
窗口函数加上一个DISTINCT
来删除重复项,就可以实现你想要的功能。或者,您可以使用
ROW_NUMBER()
,RANK()
或DENSE_RANK()
窗口函数。这个查询稍微复杂一点,但灵活得多:它允许您选择第一个
N
锦标赛,而不仅仅是第一个,不同的窗口功能处理领带(=同一天的几个注册)彼此不同。下面是
ROW_NUMBER()
的版本。gzszwxb42#
未检测,但:
有关详细信息,请参见Distinct。