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

如何在postgresql中选择相同的行?,postgresql,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 b

我正在查看的数据集有一个事件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
我从另一个查询中得到了时间戳

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

试试看

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

这将告诉您有多少个重复项。

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



如果这是一个
postgresql
问题,为什么要添加
mysql
标签?请删除不必要的标记。例如:
通过计数(*)大于1的a_dttm、b_dttm、c_dttm从数据组中选择数组作为id、a_dttm、b_dttm、c_dttm如果表有(有用的)主键,则不可能重复。我是你的朋友。问题:
id
a(代理)PK吗?有办法找到重复的吗?谢谢@Dave-只需在末尾添加HAVING子句:
HAVING count(*)>=2
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)
   );