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

能否添加
实际结果
预期结果
“计数不起作用”不是问题描述。聚合函数不倾向于寻找工作。您希望它做什么?它做了什么?您可以添加
实际结果
预期结果
“计数不起作用”不是问题描述。聚合函数不倾向于寻找工作。你想让它做什么,它做了什么?