SQL获取每个唯一ID的第一行以及在第一行之后的x时间内具有该ID的每一行

时间:2013-06-25 21:44:22

标签: mysql sql

我想知道是否可以使用单个SQL命令从表中返回每个唯一的userID,以及在接下来的24小时内返回包含该userID的行。

例如,我可能有一个结构如下的表:

id | userID | action | date

包含大量行,其中包含数千个唯一的用户ID,数十种不同的操作和日期。我基本上对每个用户ID在前24小时内所做的操作感兴趣,但这对所有用户都是如此。

所以我应该为每个userID获得10-15个不同的操作,每个userID将在不同的日期,月份甚至数年内注册,因此它不仅仅是抓住特定24小时内的所有操作。

1 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你可以使用这样的查询:

SELECT a1.*
FROM
  actions a1 INNER JOIN (SELECT   userID, MIN(date) first_action
                         FROM     actions
                         GROUP BY userID) a2
  ON a1.userID = a2.userID AND a1.date <= first_action + INTERVAL 24 HOUR

请参阅小提琴here。此查询将返回每个用户在首次操作后的前24小时内执行的所有操作。