ip ip1 ip2
1.1.1.1 10.0.0.1 NULL
1.1.1.1 NULL 10.0.0.2
2.2.2.2 10.0.0.3 10.0.0.4
ip ip1 ip2
1.1.1.1 10.0.0.1 10.0.0.2
2.2.2.2 10.0.0.3 10.0.0.4
SELECT ip, MAX(ip1) AS ip1, MAX(ip2) AS ip2
FROM t1
GROUP BY ip;
MAX 忽略 NULL,非空值中取最大(IP 字符串按字典序比較,恰好符合合併語義)。SELECT
ip,
MAX(ip1) AS ip1,
MAX(ip2) AS ip2,
MAX(ip3) AS ip3,
MAX(ip4) AS ip4
FROM t1
GROUP BY ip;
若同一 ip 存在多個非空 ip1,需明確業務規則:
-- 取最新(假設有 time 列)
SELECT ip,
MAX(CASE WHEN rn=1 THEN ip1 END) AS ip1,
MAX(CASE WHEN rn=1 THEN ip2 END) AS ip2
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ip ORDER BY time DESC) rn
FROM t1
) t
WHERE rn = 1
GROUP BY ip;