我有一个带
的MySQL表我想只选择此表的用户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来验证第二个条件。
答案 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