我有一个查询问题,想知道是否这可能是一个查询。我有疑问的数据库看起来像这样:
-------------------------------------------
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”列
我真的不知道这是否可行以及如何做到这一点。是否有人可以帮助我进行此查询?
参见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] 删除。
我来说两句