-1

假设我有:

USERS:
userid | name
1      | John
2      | Jack

HITS:
id | userid | time
1  | 1      | 50
2  | 1      | 51
3  | 2      | 52
4  | 1      | 53
5  | 2      | 54
6  | 2      | 55

如何获得每个用户的前两次点击。换句话说,修改这个:

select 
   users.userid,  
   h.time 
from  
   users  
left outer join hits h   
on (users.userid = h.userid)

得到这个:

array() {
  [user 1] {
    hit 1 => 50
    hit 2 => 51
  }
  [user 2] {
    hit 3 => 52
    hit 5 => 54
  }
}

?

我知道正常的加入会给我一切,但我如何将其限制为只有 2 次点击,从而有效地获得每个用户的前两次点击?

4

3 回答 3

2

试试这个查询 -

SELECT t.id, t.userid, t.time FROM (
  SELECT h1.*, COUNT(*) pos FROM hits h1
    LEFT JOIN hits h2
      ON h2.userid = h1.userid AND h2.time <= h1.time
  GROUP BY
    h1.userid, h1.time) t
WHERE pos <= 2;
于 2013-02-27T07:10:27.837 回答
0
SELECT  a.userid, 
        a.name, 
        b.time
FROM    users a
        INNER JOIN hits b
            ON a.userid = b.userid
WHERE 
    (
        SELECT  COUNT(*) 
        FROM    hits as c
        WHERE   b.userid = c.userid and 
                b.id >= c.id
    ) <= 2;
于 2013-02-27T06:59:22.987 回答
0

试试这个查询

SET @level = 0;
SET @group = '';

SELECT 
*
FROM (
    SELECT 
    time,
    userid,
    @level := IF(@group = userid, @level+1, 1) AS level, 
    @group := userid as UGroup 
    FROM hits
    ORDER BY userid 
) rs
WHERE level < 3 

演示

于 2013-02-27T07:03:25.840 回答