找到没有窗口功能的第三次购买

时间:2017-09-28 20:48:06

标签: mysql sql

我遇到了这个问题:

  

给定一个包含user_id,timestamp的收入事务表,   和收入,你会如何找到每个用户的第三次购买?

我知道如何使用窗口函数来解决它,但我不知道如何在没有窗口函数的情况下解决它。例如,相关子查询。

如果我们想要找到n次购买,您的方法是否有效?

1 个答案:

答案 0 :(得分:5)

在MySQL中,我会使用变量:

select t.*
from (select t.*,
             (@rn := if(@u = user_id, @rn + 1,
                        if(@u := user_id, 1, 1)
                       )
             ) as rn
      from (select t.*
            from transactions t
            order by user_id, timestamp
           ) t cross join
           (select @rn := 0, @u := -1) params
     ) t
where rn = 3;

也就是说,老式的SQL方法是一个相关的子查询:

select t.*
from transactions t
where 3 = (select count(*)
           from transactions t2
           where t2.user_id = t.user_id and t2.timestamp <= t.timestamp
          );