Sql 选择有两个或更多结果的位置
我有一个包含以下记录的表格:Sql 选择有两个或更多结果的位置,sql,postgresql,select,Sql,Postgresql,Select,我有一个包含以下记录的表格: 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:
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
我想把trip有一个或多个结果作为结果记录,但count不能用于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
正确的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
正确的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
如果要计算
行程
,请将mensage
从查询中排除:
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;
如果要计算
行程
,请将mensage
从查询中排除:
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;
如果在相同的
viagemu 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
如果在相同的
viagemu 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
能否添加
实际结果
和预期结果
“计数不起作用”不是问题描述。聚合函数不倾向于寻找工作。您希望它做什么?它做了什么?您可以添加实际结果
和预期结果
“计数不起作用”不是问题描述。聚合函数不倾向于寻找工作。你想让它做什么,它做了什么?