Recentemente, fiz a mesma pergunta sobre o MySQL, que já foi migrado para o Postgres. Pergunta antiga .
Resumindo:
Eu tenho uma tabela com um id ( tipo UUID ), um timestamp e algum texto (row3). Como retenho apenas uma entrada por hora para cada valor distinto de row3?
O que eu tentei é isso:
INSERT INTO log_table
SELECT * FROM table1
WHERE id IN (
SELECT DISTINCT ON(id) id
FROM table1
GROUP BY row3, EXTRACT(HOUR FROM "time"), id
);
TRUNCATE table1;
Mas isso, infelizmente, insere todas as linhas da tabela1.