为了账号安全,请及时绑定邮箱和手机立即绑定

sql 求一个算法

sql 求一个算法

扬帆大鱼 2019-04-19 16:11:33
一个表有两个字段,想查询那些srcip有对应5个或者5个以上连续dstiptableip+-------------+-------------+|srcip|dstip|+-------------+-------------+|192.168.0.2|192.168.1.4||192.168.0.2|192.168.1.3||192.168.0.2|192.168.1.5||192.168.0.2|192.168.1.6||192.168.0.2|192.168.1.7||192.168.0.2|192.168.1.2||192.168.0.5|192.168.1.2|+-------------+-------------+
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

我想用存储过程写一个。
BEGIN
#Routinebodygoeshere...
DECLARElastSrcIPVARCHAR(255)DEFAULT"";
DECLARElastDestIPINT;
DECLAREsrcIPVARCHAR(255)DEFAULT"";
DECLAREdestIPINT;
DECLAREcountINTDEFAULT0;
DECLAREdoneINTDEFAULT0;
DECLAREip_cursorCURSORFORSELECTsrcip,INET_ATON(dstip)dest_ipfromipwheresrcipin(SELECTp.srcipfromippGROUPBYsrcipHAVINGCOUNT(p.dstip)>=5)ORDERBYsrcip,dest_ip;
DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=1;
OPENip_cursor;
REPEAT
FETCHip_cursorINTOsrcIP,destIP;
IFdone=0THEN
INSERTINTOtbl_src_ipVALUES(UUID(),srcIP);
#计数开始
IFsrcIP=lastSrcIPTHEN
IF(destIP-lastDestIP)=1THEN
SETCOUNT=COUNT+1;
ENDIF;
IF(destIP-lastDestIP)<>1THEN
SETCOUNT=1;
ENDIF;
ENDIF;
IFsrcIP<>lastSrcIPTHEN
#新的srcIP组
SETcount=1;
SETlastSrcIP=srcIP;
SETlastDestIP=destIP;
ENDIF;
#如果COUNT==5,则找到
IFCOUNT=5THEN
##放入临时表验证
INSERTINTOtbl_src_ipVALUES(UUID(),srcIP);
ENDIF;
ENDIF;
UNTILdone
ENDREPEAT;
CLOSEip_cursor;
END
程序还有待调通。
关键点:
mysql>SELECTsrcip,INET_ATON(dstip)dest_ipfromipwheresrcipin(SELECTp.srcipfromippGROUPBYsrcipHAVINGCOUNT(p.dstip)>=5)ORDERBYsrcip,dest_ip;
+-------------+------------+
|srcip|dest_ip|
+-------------+------------+
|192.168.0.2|3232235778|
|192.168.0.2|3232235779|
|192.168.0.2|3232235780|
|192.168.0.2|3232235781|
|192.168.0.2|3232235782|
|192.168.0.2|3232235783|
+-------------+------------+
6rowsinset
1.用GROUPBY和HAVING子句找出dstip大于等于5个的记录
2.使用INET_ATON函数将dstip转成Integer类型。
                            
查看完整回答
反对 回复 2019-04-19
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

说一下思路,SQL忘的差不多了。
为了方便描述,表简化为src为字符串,dist为整数,表称为t。
tjoin自己t1,条件为src相等,t1.dist-t.distin[0,4]
结果为
IPa11
IPa12
……
IPa15
从这个结果groupbyt.src,t.disthavingcount(*)=5
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号