【发布时间】:2019-12-17 08:46:37
【问题描述】:
查找每天至少提交的唯一黑客总数(从比赛的第一天开始),并查找每天提交最多的黑客的hacker_id 和名称。如果不止一个这样的黑客有提交的最大数量,打印最低的hacker_id。查询应打印比赛每一天的此信息,按日期排序。
这里是示例数据: 黑客表:
15758 Rose
20703 Angela
36396 Frank
38289 Patrick
44065 Lisa
53473 Kimberly
62529 Bonnie
79722 Michael
Submissions table:
Submission_date submission_id hacker_id score
3/1/2016 8494 20703 0
3/1/2016 22403 53473 15
3/1/2016 23965 79722 60
3/1/2016 30173 36396 70
3/2/2016 34928 20703 0
3/2/2016 38740 15758 60
3/2/2016 42769 79722 25
3/2/2016 44364 79722 60
3/3/2016 45440 20703 0
3/3/2016 49050 36396 70
3/3/2016 50273 79722 5
3/4/2016 50344 20703 0
3/4/2016 51360 44065 90
3/4/2016 54404 53473 65
3/4/2016 61533 79722 45
3/5/2016 72852 20703 0
3/5/2016 74546 38289 0
3/5/2016 76487 62529 0
3/5/2016 82439 36396 10
3/5/2016 90006 36396 40
3/6/2016 90404 20703 0
for the above data, expected results is:
2016-03-01 4 20703 Angela
2016-03-02 2 79722 Michael
2016-03-03 2 20703 Angela
2016-03-04 2 20703 Angela
2016-03-05 1 36396 Frank
2016-03-06 1 20703 Angela
我下面的查询没有给我唯一的hacker_ids
select submission_date, cnt, hacker_id, name from
(select s.submission_date
, count(s.hacker_id) over(partition by s.submission_date) cnt
, row_number() over(partition by s.submission_date order by s.hacker_id asc) rn
, s.hacker_id, h.name from submissions s
inner join hackers h on h.hacker_id = s.hacker_id) as tble
where tble.rn = 1;
如何获得上述结果中唯一的hacker_ids?
【问题讨论】:
-
what about::> select distinct s.hackerid from submits s inner join hackers h on h.hacker_id = s.hacker_id) as tble where tble.rn = 1;
标签: sql sql-server window-functions