我有一个无法更改的数据库结构,但我想找到获取此数据的最有效方法。
我们有一个具有 3 个级别的游戏对象,在每个级别结束时,游戏都会将一个分数保存到数据库中,级别分数位于相应的列中,其他级别的列中为 0。如下图所示:
数据库结构:
UserID | Score1| Score2| Score3| CreatedAt
1 |0 |0 |3 |<today>
1 |2 |0 |0 |<today>
1 |0 |5 |0 |<today>
1 |0 |0 |2 |<yesterday>
1 |0 |6 |0 |<yesterday>
1 |1 |0 |0 |<yesterday>
1 |0 |0 |6 |<3 days ago>
1 |0 |7 |0 |<3 days ago>
1 |4 |0 |0 |<3 days ago>
现在,是的,拥有像 UserID | 这样的结构将是一个更好的解决方案。分数 |等级编号 | CreatedAT ,但由于其他一些情况,我们无法更改结构。
所以,我想做的是,进行一个查询,在给定日期的情况下获取三个最新分数。例如,在上面的示例中,查询今天的日期将返回 Score1: 2、Score2: 5、Score3: 3 的结果; 2 天前查询会得到 Score1: 4, Score2: 7, Score3: 6;
最佳答案
这应该可以解决您的问题:
select userid
, s1
, s2
, s3
from (
select userid
, createdat
, sum(score1) s1
, sum(score2) s2
, sum(score3) s3
from table
group by userid
, createdat
) t
where t.createdat = (
select max(t1.createdat)
from table t1
where t1.userid = t.userid
and t1.createdat <= <date_queried>
)
;
关于mysql - 如何对该查询进行分组以返回单个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326344/