问题说明
我有一个数据表multiplayergame
,其中每个UserID
有多个记录详细说明了他们在多人游戏中的活动,以及游戏发生的日期DateID
。
问题
如何在第一场比赛的第一个月内查询每个用户的游戏?即,在第一个多人游戏的第一个记录的30天内抓取该用户的所有行?
答案 0 :(得分:1)
如果您有很多用户,这将会很慢,但它会起作用。子查询获取UserID的列表及其第一个游戏的DateID,然后选择DateID在此日期和接下来的30天之间(对于每个用户)的所有游戏。如果您将第一个游戏日期添加到用户表或使用用户created_at日期,则可以通过充分使用索引来加快速度。
SELECT * FROM multiplayergame m1
JOIN (SELECT MIN(m.DateID) as first_game, m.UserID
FROM multiplayergame m
GROUP BY m.UserID) der on der.UserID=m1.UserID and m1.DateID BETWEEN der.first_game AND der.first_game + INTERVAL 30 DAY
答案 1 :(得分:0)
以下内容将为您提供行:
WHERE create_date BETWEEN create_date() AND DATE_ADD(create_date, INTERVAL 30 DAY)
答案 2 :(得分:0)
是的,就像@Pritam Banerjee的回答CURDATE()一样。但是选择表*。
SELECT *
FROM multiplayergame
WHERE DateID BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
你也可以使用NOW()
SELECT *
FROM multiplayergame
WHERE DateID BETWEEN NOW() - INTERVAL 30 DAY AND NOW()