如何在postgresql中选择相同的行?

时间:2017-06-26 21:28:14

标签: postgresql

我正在查看的数据集中包含事件的ID,但有几列(a_dttm,b_dttm和c_dttm)的日期和时间不止一次出现。我调查了一下,发现尽管ID是唯一的,但整个行看起来几乎完全相同。

因此,无需经过200行潜在的相同行,我可以在postgres中编写什么来搜索a_dttm,b_dttm和c_dttm中相同的行?

这就是我一直在逐一选择相同的行:

SELECT *
FROM data
WHERE a_dttm::timestamp = '2007-01-13 08:29:35'
order by a_dttm desc

我从另一个查询中获取了时间戳。

我知道如果这三列完全相同,那么这些行肯定是重复的。

2 个答案:

答案 0 :(得分:1)

尝试

select count(*), a_dttm, b_dttm, c_dttm 
from data 
group by a_ddtm, b_dttm, c_dttm;

这应该告诉你有多少重复。

答案 1 :(得分:0)

这将选择存在(至少一个)其他行的所有行,具有相同的{a_dttm,b_dttm,c_dttm},但具有不同的id:

SELECT * 
FROM the_table t
WHERE EXISTS (
   SELECT*
   FROM the_table x
   WHERE x.a_dttm = t.a_dttm -- same
     AND x.b_dttm = t.b_dttm --same
     AND x.c_dttm = t.x_dttm --same 
     AND x.id <> t.id        -- different
   );

类似,但现在实际上正在删除(某些)重复数据:

DELETE 
FROM the_table t
WHERE EXISTS (
   SELECT*
   FROM the_table x
   WHERE x.a_dttm = t.a_dttm -- same
     AND x.b_dttm = t.b_dttm --same
     AND x.c_dttm = t.x_dttm --same 
     AND x.id > t.id        -- different (actually: with a higher id)
   );