[英]Sql Query with time interval
我希望在“ 2014-07-01”和“ 2014-08-01”之間獲得最佳的3天用戶
有人可以幫我嗎? 我已經在這里停留了三天。
在實際分數表中,條目為10:00到22:00,每小時1個條目。
每天和每個玩家總共有12個條目(有時可能少於1或2)。
這是我想要獲得的輸出:
ID | User_ID | Username | Sum(Score) | Date
--------------------------------------------------
1 | 1 | Xxx | 52 | 2014-07-01
2 | 1 | Xxx | 143 | 2014-07-02
3 | 2 | Yyy | 63 | 2014-07-01
...
Score
表:
ID | User_ID | Score | Datetime
-----------------------------------------
1 | 1 | 35 | 2014-07-01 11:00:00
2 | 1 | 17 | 2014-07-01 12:00:00
3 | 2 | 36 | 2014-07-01 11:00:00
4 | 2 | 27 | 2014-07-01 12:00:00
5 | 1 | 66 | 2014-07-02 11:00:00
6 | 1 | 77 | 2014-07-02 12:00:00
7 | 2 | 93 | 2014-07-02 12:00:00
...
User
表:
ID | Username
--------------
1 | Xxx
2 | Yyy
3 | Zzz
...
我認為您首先需要按日期進行匯總,然后使用row_number()
選擇前三個。 要進行聚合:
select s.user_id, sum(s.datetime, 'day') as theday, sum(score) as score,
row_number() over (partition by s.user_id order by sum(score) desc) as seqnum
from scores s
group by s.user_id;
要獲取其余信息,請將其用作子查詢或CTE:
select u.*, s.score
from (select s.user_id, sum(s.datetime, 'day') as theday, sum(s.score) as score,
row_number() over (partition by s.user_id order by sum(s.score) desc) as seqnum
from scores s
group by s.user_id
) s join
users u
on s.user_id = u.users_id
where seqnum <= 3
order by u.user_id, s.score desc;
SELECT 'group has no id' as ID,
u.ID as User_ID,
u.Username,
sum(s.Score) "Sum(Score)",
s.Datetime::date as Date
FROM User u,
Score s
WHERE u.id = s.User_ID
AND s.Datetime BETWEEN '2014-07-01' AND '2014-08-01 23:59:59'
GROUP BY u.ID, u.Username, s.Datetime::date
ORDER BY sum(s.Score) DESC
LIMIT 3;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.