Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带时间间隔的Sql查询_Sql_Postgresql_Relational Database - Fatal编程技术网

带时间间隔的Sql查询

带时间间隔的Sql查询,sql,postgresql,relational-database,Sql,Postgresql,Relational Database,我想在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 |

我想在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
...
评分表:

用户表:


我认为您需要首先按日期进行聚合,然后使用行数选择前三个。要进行聚合,请执行以下操作:

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;

我想你希望第三排的结果是63。你说得对,我把它改成了63。
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;
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;