我正在尝试从如下所示的SQLite表中提取数据:
IP PORT PROTOCOL
-------------------------------------------
192.168.50.106 0 TCP
192.168.50.106 0 TCP
192.168.50.106 68 UDP
192.168.50.106 53 TCP
192.168.50.106 53 TCP
192.168.50.109 0 TCP
192.168.50.109 0 TCP
192.168.50.109 53 UDP
192.168.50.109 445 TCP
192.168.50.109 445 TCP
192.168.50.109 139 TCP
现在,使用命令:
SELECT IP, GROUP_CONCAT(Port, ',') From PortData WHERE Protocol = 'TCP' GROUP BY Ip ORDER BY IP ASC
我得到:
IP PORT
--------------------------------------
192.168.50.106 0,0,53,53
192.168.50.109 0,0,445,445,139
这真的很接近我所需要的!我只需要“端口”列以仅显示不同的端口值,并按升序排列端口号即可。在连接第二列的数据后,我非常困惑。
这是我要获取的输出,如果您想要一个示例:
IP PORT
--------------------------------------
192.168.50.106 0,53
192.168.50.109 0,139,445
非常感谢您的帮助!
答案 0 :(得分:1)
在进行格式化查询之前,不要在之前之前整理格式化的数据,以消除重复项并生成正确的顺序。作为子查询或公共表表达式(CTE)(即WITH子句)执行此操作。
(随后尝试排序和消除重复项实际上需要重新分析字符串,将其放入表中,排序并除去重复项,然后再将其放回列表中。您只是整圈而已。或者不在数据库中,则必须使用宿主语言来完成,但是它需要相同的总体步骤。)
this.strike