亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

sql 求一個算法

sql 求一個算法

慕的地6264312 2019-04-16 17:06:01
一個表有兩個字段,想查詢那些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 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

我想用存儲過程寫一個。
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-16
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

說一下思路,SQL忘的差不多了。
為了方便描述,表簡化為src為字符串,dist為整數,表稱為t。
tjoin自己t1,條件為src相等,t1.dist-t.distin[0,4]
結果為
IPa11
IPa12
……
IPa15
從這個結果groupbyt.src,t.disthavingcount(*)=5
                            
查看完整回答
反對 回復 2019-04-16
  • 2 回答
  • 0 關注
  • 461 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號