簡體   English   中英

帶時間間隔的SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM