我有一张表TEST,它有这样的记录
ID USERNAME IPADDRS CONNTIME country
8238237 XYZ 10.16.199.20 11:00:00 USA
8255237 XYZ 10.16.199.20 11:00:00 UK
485337 ABC 10.16.199.22 12:25:00 UK
8238237 ABC 10.16.199.23 02:45:00 INDIA
我必须比较每条记录,并且必须获取记录的ID值,该记录的国家/地区列为英国且具有相同的USERNAME
,IPADDRS
和CONNTME
。
表示USERNAME
,IPADDRSS
,CONNTIME
应该相同,但最终过滤器将在英国国家/地区进行。
因此,对于上表,输出将为ID=8255237
。
感谢您的帮助。谢谢!
答案 0 :(得分:0)
嗯,SQL是描述性的。所以你应该描述你想要的东西。怎么样?
select a.id from ip a where a.country='UK' and (a.username,a.ipaddrs,a.conntime) in (select username,ipaddrs,conntime from ip where country<>'UK')
基本上,您为匹配所需三元组的ID选择ID,但匹配记录不应来自UK。这是基本的SQL,应该在所有系统上运行。免责声明:您可能需要索引来提高性能。
答案 1 :(得分:0)
试试这个:
SELECT a.ID FROM (SELECT ID,USERNAME,IPADDRS,CONNTIME,COUNTRY,ROW_NUMBER()OVER(PARTITION BY USERNAME,IPADDRS,CONNTIME ORDER BY USERNAME,IPADDRS,CONNTIME) AS seq
FROM EMP_IP) a WHERE a.COUNTRY = 'UK' AND a.seq > 1;