MySQL查询 - 每天查找“新”用户

时间:2010-12-12 17:08:33

标签: mysql aggregate

我有一个包含以下字段的数据表

EventID        : Int, AutoIncrement, Primary Key
EventType      : Int                             ' Defines what happened
EventTimeStamp : DateTime                        ' When the Event Happened
UserID         : Int                             ' Unique

查询需要告诉我整个集合中每天的新UserID发生了多少事件。因此,对于每一天,存在多少具有在任何前一天不存在的UserID的事件。我已经尝试了很多,而且我每天都可以获得独特的用户,但无法确定如何每天获得“新”用​​户。

5 个答案:

答案 0 :(得分:1)

好问题。我没有一个确切的解决方案,但这是我以前见过的方法:

执行SELECT,将EventTimeStampMIN(EventTimeStamp)进行比较以获取给定的userID,由同一表上的嵌套SELECT语句确定,以计算每个ID的MIN时间戳(例如{{1 }})。

答案 1 :(得分:1)

Select count(EventId) from table
where 
UserId 
  not in (select UserId from table where EventTimeStamp < now() - interval 1 day)

答案 2 :(得分:1)

首先获得每个用户初次到达时的表b, 然后加入该表以获取当天该用户的所有事件。

SELECT DATE(a.EventTimeStamp), COUNT(*) FROM table a
JOIN
(SELECT MIN(EventTimeStamp) AS EventTimeStamp, UserID from table group by userID) b
ON a.UserID = b.UserID
AND DATE(a.EventTimeStamp) = DATE(b.EventTimeStamp) 
GROUP BY DATE(a.EventTimeStamp) 

答案 3 :(得分:1)

谢谢大家的帮助 - 我已经投了很多帮助。这是我做的:

我创建了这两个视图(我需要最终得到一个视图,并且必须创建2,因为它似乎无法在视图中嵌套select语句。)

目击:

select min(to_days(`Events`.TimeStamp)) AS Day0,
    `Events`.TimeStamp AS TimeStamp,
    `Events`.UserID AS UserID
from `Events` group by `Events`.UserID order by `Events`.UserID

newusers使用:

select count(distinct Sightings.UserID) AS Count,
    date(Sightings.TimeStamp) AS Date from Sightings
    group by date(Sightings.TimeStamp)

答案 4 :(得分:0)

86400-(EventTimeStamp)as new_users