通过 postgresql 插入 table 个唯一行

Insert into table unique rows by postgresql

我在 greenplum 中有一些代码统计信息 table A

| id  | file   | repo | lang | line |
-------------------------------------
| a   | /a.txt | r1   | txt  | 3    |
| a   | /b.c   | r1   | c    | 5    |
| b   | /x.java| r1   | java | 33   |
| c   | /f.cpp | r2   | c++  | 23   |
| a   | /a.txt | r3   | txt  | 3    |
| a   | /b.c   | r3   | c    | 5    |

但最后两行代码表明此代码来自 repo r1,因为提交 ID 与前两行相同。 我想删除重复的行,并将结果插入 table B:

| id  | file   | repo | lang | line |
-------------------------------------
| a   | /a.txt | r1   | txt  | 3    |
| a   | /b.c   | r1   | c    | 5    |
| b   | /x.java| r1   | java | 33   |
| c   | /f.cpp | r2   | c++  | 23   |

行可以通过以下方式区分:id + file + repo

提前致谢。

您可以使用 NOT EXISTS 来检查是否存在重复项:

SELECT *
FROM t
WHERE NOT EXISTS (
    SELECT 1
    FROM t AS x
    WHERE x.id   = t.id
    AND   x.file = t.file
    AND   x.repo < t.repo
)

SQL Fiddle

聚合似乎可以满足您的要求:

select id, file, min(repo) as repo, lang, line
from t
group by id, file, lang, line;