如何查询每个用户的第一个月的数据

时间:2016-08-01 18:51:08

标签: mysql

问题说明

我有一个数据表multiplayergame,其中每个UserID有多个记录详细说明了他们在多人游戏中的活动,以及游戏发生的日期DateID

问题

如何在第一场比赛的第一个月内查询每个用户的游戏?即,在第一个多人游戏的第一个记录的30天内抓取该用户的所有行?

3 个答案:

答案 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()