MySQL根据Continuously Rows Value&amp ;;选择用户ID。条件

时间:2016-07-21 11:17:18

标签: mysql sql

我有一个带

的MySQL表
  • row_id(主要)
  • USER_ID
  • user_ip
  • date_start(unix timestamp)
  • date_end(unix timestamp)

我想只选择此表的用户ID(不同) IF 至少连续2行WHERE

  

[行X]中的user_ip与[行X + 1]中的user_ip不同

AND

  

ABS([行X]中的date_end - [行X + 1]中的date_start)< = 20

行应按row_id ASC排序,以便我们可以连续获取行X,X + 1等。

我很容易用PHP做到这一点,但它非常慢,所以我认为只需使用sql即可完成。

示例

row_id  |  user_id  |  user_ip   |  date_start  |  date_end

1       ,  1        ,  127.0.0.1 ,  1469100096  ,  1469100099
2       ,  2        ,  5.5.5.5   ,  1469100054  ,  1469100055
3       ,  3        ,  4.4.4.4   ,  1469100032  ,  1469100036
4       ,  1        ,  6.6.6.6   ,  1469100117  ,  1469100099
5       ,  4        ,  127.0.0.1 ,  1469100001  ,  1469100005
6       ,  2        ,  127.0.0.1 ,  1469100555  ,  1469100565

由此,我们应该只得到用户ID 1因为用户ID 1 HAD不同的IP连续2行+第一行的date_end(1469100099) - 下一行的日期开始1(469100117)= 18这是< = 20。

我们不应该返回用户ID 2,因为虽然它验证了第一个条件,但它并没有使用date_end和date_start来验证第二个条件。

1 个答案:

答案 0 :(得分:0)

SELECT parent.* FROM userip parent  
                JOIN userip child ON parent.`user_ip` != child.`user_ip`  
                WHERE ABS( parent.`date_end` - child.date_start) <= 20 
                      AND parent.user_id = child.user_id 
GROUP BY parent.user_id