进行查询以按IP对事物进行分组

十六进制

我有一个查询问题,想知道是否这可能是一个查询。我有疑问的数据库看起来像这样:

-------------------------------------------
id  |  name       |        IP      |   nr
-------------------------------------------
 1  | Fleet-1234  | 192.168.52.254 | 1234
 5  | Boat-4567   | 192.168.52.256 | NULL
 9  | Boat-4565   | 192.168.52.250 | NULL
10  | Boat-4547   | 192.168.52.252 | NULL
13  | Fleet-6663  | 192.168.44.256 | 6663
18  | Boat-2345   | 192.168.44.145 | NULL
56  | Boat-2345   | 192.168.44.14  | NULL
60  | Boat-1111   | 192.168.44.15  | NULL

我希望得到的结果是:

-------------------------------------------
id  |  name       |        IP      |   nr
-------------------------------------------
 1  | Fleet-1234  | 192.168.52.254 | 1234
 5  | Boat-4567   | 192.168.52.256 | 1234
 9  | Boat-4565   | 192.168.52.250 | 1234
10  | Boat-4547   | 192.168.52.252 | 1234
13  | Fleet-6663  | 192.168.44.256 | 6663
18  | Boat-2345   | 192.168.44.145 | 6663
56  | Boat-2345   | 192.168.44.14  | 6663
60  | Boat-1111   | 192.168.44.15  | 6663

我想我需要做的是:-比较IP的前三个八位字节(在同一“舰队”中是相同的)-iff比较发现在同一“组”中使用Fleet-XXXX的“ nr”列

我真的不知道这是否可行以及如何做到这一点。是否有人可以帮助我进行此查询?

Pholochtairze

参见sqlfiddle

SELECT 
    t0.id
    , t0.name
    , t0.IP
    , t1.nr
FROM your_table t0
INNER JOIN (SELECT LEFT(IP, LENGTH(IP) - LOCATE('.', REVERSE(IP))) AS shortened_IP, MAX(nr) AS nr FROM your_table GROUP BY 1) t1
ON LEFT(IP, LENGTH(IP) - LOCATE('.', REVERSE(IP))) = t1.shortened_IP;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章