如何在postgresql中选择相同的行?
我正在查看的数据集有一个事件id,但有几个列(a_dttm、b_dttm和c_dttm)的日期和时间出现了不止一次。我查看了它,发现尽管ID是唯一的,但有整行看起来几乎相同 因此,在不必遍历200行可能相同的行的情况下,我可以在postgres中写些什么来搜索a_dttm、b_dttm和c_dttm中相同的行呢 这就是我一行一行地选择相同行所做的:如何在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
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)
);