获取每个 ID 的 2 个时间戳之间的前 N 行 Mysql
Getting first N rows between 2 timestamps for each ID Mysql
我有如下所示的 table,例如 start_t 是我在 unixtime 中的时间戳 (1438326239412) 但为了简单起见,我在这里写了一些小数字:
user_id | start_t | duration
1 12 1
1 15 2
1 4 5
2 9 6
2 10 5
3 9 6
我想为两个时间戳之间的每个 user_id 获取前 N 行。这是我的代码,但它 returns 超过了我想要的限制:
SELECT us.* FROM (SELECT us.*, (@rn := if(@i = us.user_id, @rn + 1, if(@i := us.user_id, 1, 1) ) ) AS seqnum FROM user_stats us,tourn_user tu CROSS JOIN (SELECT @rn := 0, @i := -1) params WHERE (us.start_t+us.duration)<= 20 AND us.start_t >= 4 ORDER BY us.user_id, start_t ASC ) us WHERE seqnum <= 1
该特定示例的结果应如下所示:
user_id | start_t | duration
1 4 5
2 9 6
3 9 6
以下是解决方案,以防有人需要:
select us.* from (select us.*, (@rn := if(@i = us.user_id, @rn + 1, if(@i := us.user_id, 1, 1) ) ) as seqnum from user_stats us cross join (select @rn := 0, @i := -1) params where (us.start_t+us.duration)<= 15 AND us.start_t >= 0 order by us.user_id, start_t ASC ) us where seqnum <= 1
我有如下所示的 table,例如 start_t 是我在 unixtime 中的时间戳 (1438326239412) 但为了简单起见,我在这里写了一些小数字:
user_id | start_t | duration
1 12 1
1 15 2
1 4 5
2 9 6
2 10 5
3 9 6
我想为两个时间戳之间的每个 user_id 获取前 N 行。这是我的代码,但它 returns 超过了我想要的限制:
SELECT us.* FROM (SELECT us.*, (@rn := if(@i = us.user_id, @rn + 1, if(@i := us.user_id, 1, 1) ) ) AS seqnum FROM user_stats us,tourn_user tu CROSS JOIN (SELECT @rn := 0, @i := -1) params WHERE (us.start_t+us.duration)<= 20 AND us.start_t >= 4 ORDER BY us.user_id, start_t ASC ) us WHERE seqnum <= 1
该特定示例的结果应如下所示:
user_id | start_t | duration
1 4 5
2 9 6
3 9 6
以下是解决方案,以防有人需要:
select us.* from (select us.*, (@rn := if(@i = us.user_id, @rn + 1, if(@i := us.user_id, 1, 1) ) ) as seqnum from user_stats us cross join (select @rn := 0, @i := -1) params where (us.start_t+us.duration)<= 15 AND us.start_t >= 0 order by us.user_id, start_t ASC ) us where seqnum <= 1