比较某些列的表的每个记录

时间:2015-08-06 05:05:25

标签: db2 compare netezza

我有一张表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值,该记录的国家/地区列为英国且具有相同的USERNAMEIPADDRSCONNTME

表示USERNAMEIPADDRSSCONNTIME应该相同,但最终过滤器将在英国国家/地区进行。

因此,对于上表,输出将为ID=8255237

感谢您的帮助。谢谢!

2 个答案:

答案 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;
相关问题