Olá
Tenho uma tabela, com seriais duplicados em diferentes horas ex>
Serial | Data/Hora
AB1 | 05/12/2012 08:00
AB2 | 05/12/2012 08:00
AB1 | 05/12/2012 15:00
AB2 | 05/12/2012 15:00
E gostaria de contar quantos seriais por hora, sem contar os seriais duplicados:
Tentei:
SELECT
date_trunc('hour',tb_registro.datah)::text as hora,
count(distinct tb_registro.serial) as cont
FROM
tb_registro
WHERE
...
GROUP BY
hora, qtd
order by dia;
Mas veja que preciso agrupar por hora, e assim ele também só faz o (distinct serial) naquela hora e não em todos os registros
no exemplo a saída ficaria assim:
05/12/2012 08:00 | 2
05/12/2012 15:00 | 2
Na real só tenho 2 seriais e não 4.
Até poderia ser eliminado um desses registros.
Obrigado.
Consegui isolar os repetidos da seguinte forma:
[code]
CREATE TEMP TABLE tb3 ON COMMIT DROP AS
SELECT
serial, min(datah) as datah, qtd --; filtra o primeiro serial que apareceu
FROM
…
WHERE
…
GROUP BY tb_registro.serial, tb_op.qtd
order by tb_registro.serial;
SELECT
date_trunc('hour',tb3.datah)::text as dia,
tb3.qtd,
count(distinct tb3.serial) as cont
from tb3
GROUP BY
dia, qtd
order by dia;
Consegui isolar os repetidos da seguinte forma:
CREATE TEMP TABLE tb3 ON COMMIT DROP AS
SELECT
serial, min(datah) as datah, qtd --; filtra o primeiro serial que apareceu
FROM
...
WHERE
...
GROUP BY tb_registro.serial, tb_op.qtd
order by tb_registro.serial;
SELECT
date_trunc('hour',tb3.datah)::text as dia,
tb3.qtd,
count(distinct tb3.serial) as cont
from tb3
GROUP BY
dia, qtd
order by dia;
Apenas um comentário:
Você não precisa criar uma tabela temporária para isso.
Pega o select que monta tb3 e coloca no FROM da query que usa ela.