我实际上很难为我的问题想出一个不错的头衔。
我有一个表格,可以记录用户何时达到某个特定游戏的级别。 级别从1到5,但我特别感兴趣的是知道他们在 3级(对于任何游戏)中被困多久。
我的桌子(gamehistorylog):
gameid (int)
level (int)
dateofchange (date)
我显然对级别低于3的游戏不感兴趣。
我可以使用datediff()
,但我不确定如何形成查询以获得仍处于第3级的学生的综合数据(他们在那里多久了?)和那些它已经通过了4级和4级5( 3级花费多长时间)?
每次传递一个级别时,都会生成一个表记录,其中包含新级别和特定游戏的日期。
预期输出只是表格中所有等于或高于等级3的游戏以及花在第3级上的时间的列表。
我有另一张表保留官方游戏状态,因此我可以加入该表并查询状态= 3的游戏的最近日期。
select l.gameid as gid,
DATEDIFF(NOW(), max(dateofchange)) as datediff
from gamehistorylog l
join games g on g.gameid = l.gameid
where g.status = 3 and l.level = 3 ;
这将获得最高级别为3的所有实例的数据。我不知道如何为那些已经进展到更高级别然后将它们全部组合的实例获取。
答案 0 :(得分:1)
select g.gameid as gid, datediff(curdate(), l.dateofchange) as datediff
from gamehistorylog l
join games g on g.gameid = l.gameid where l.level = 3 and g.status = 3
UNION
select a.gameid as gid, datediff(a.dateofchange, b.dateofchange) as datediff
from gamehistorylog a
join gamehistorylog b on a.gameid = b.gameid
where a.level = 4 and b.level = 3