我有一张包含这些记录的表格:
id viagem_id erro mensagem
9350 0000038037 false Documento PAT 75928 foi gravado 2017-10-26 09:06:31
9349 0000038037 true DOcumento SD 0000508183 item 000010 foi cancelado: Motivo RECUSA FINANCEIRA 2017-10-26 08:59:48
我希望结果记录表明旅行有一个或多个结果,但是计数不适用于postgres
select
h.viagem_id,
count(viagem_id),
h.mensagem
from
sap.hist_rec_viagem h
where
h.horario between '25/10/2017' and '27/10/2017'
group by
h.viagem_id, mensagem
having
count(viagem_id) > 1
order by
viagem_id
答案 0 :(得分:1)
如果您想要计算trips
,请将mensagem
从查询中删除:
select h.viagem_id, count(viagem_id)
from sap.hist_rec_viagem h
where h.horario between '2017-10-25' and '2017-10-27'
group by h.viagem_id
having count(viagem_id) > 1
order by viagem_id;
如果您想要原始行中的所有细节,请使用窗口函数:
select h.*
from (select h.*, count(*) over (partition by viagem_id) as cnt
from sap.hist_rec_viagem h
where h.horario between '2017-10-25' and '2017-10-27'
) h
where cnt > 1
order by viagem_id;
答案 1 :(得分:1)
如果您在同一viagem_id
上搜索重复,请使用CTE
表达式(类似于嵌套查询,但更优雅)来查找重复键,并在与原始表连接后选择详细信息:
with duplicate_viagem_id as
select
viagem_id,
count(*) as nb
from
sap.hist_rec_viagem h
where
h.horario between '25/10/2017' and '27/10/2017'
group by
h.viagem_id
having
count(*) > 1
),
select
h.viagem_id,
d.nb,
h.mensagem
from
sap.hist_rec_viagem h inner join duplicate_viagem_id d on
h.viagem_id=d.viagem_id
答案 2 :(得分:0)
正确的SQL:
select
co.viagem_id,
co.count,
ca.mensagem
from
(
select
h.viagem_id,
count( viagem_id )
from
sap.hist_rec_viagem h
where
h.horario between '25/10/2017' and '27/10/2017'
group by
h.viagem_id
having
count( viagem_id )> 1
) co inner join(
select
viagem_id,
mensagem
from
sap.hist_rec_viagem
) ca on
(
ca.viagem_id = co.viagem_id
)
order by
viagem_id