我不是一个流利的英语发言人,所以很难解释我的意思。 我有一个表,列出每个团队每年的一个值(nvarchar)。 现在我需要每年发现一个具有该值最多出现的团队。请看下面的例子:
表格如下:
yearmonth (int) | team_id (int) | value (nvarchar)
201301 | 10 | 4325
201301 | 9 | 4325
201301 | 12 | 8325
201301 | 25 | 4325
201302 | 25 | 8345
201302 | 10 | 2544
201302 | 35 | 2544
201305 | 10 | 3689
201305 | 7 | 8654
201305 | 8 | 8654
我现在需要的是:
yearmonth | team_id
201301 | 9
201302 | 10
201305 | 7
201301 = 9 (or 10 or 25 because 4325 occurs most often, I don't care which team I get
201302 = 10 (or 35) because 2544 occurs most often, I don't care which team I get)
201305 = 7 (or 8) because 8654 occurs most often, I don't care which team I get
我一直在关注rank(),dense_rank(),不同的分组和排序选项,但它们都帮助我找到最常出现的值。我需要找到一个 teamid ,它与最多发生的价值一起......这就是我迷路的地方...... 不知怎的,我的直觉告诉我它不应该那么难,但我已经在这个问题上坚持了三天:s
答案 0 :(得分:1)
您可以ROW_NUMBER
使用COUNT
排序,以获得每组最大n个查询。
WITH t
AS (SELECT yearmonth,
value,
min(team_id) AS team_id,
ROW_NUMBER() OVER (PARTITION BY yearmonth
ORDER BY COUNT(*) DESC) AS RN
FROM YourTable
GROUP BY yearmonth,
value)
SELECT yearmonth,
team_id
FROM T
WHERE RN = 1