SUM函数对记录进行两次求和

时间:2017-02-25 15:22:33

标签: mysql sql aggregate-functions greatest-n-per-group

首先,为了让您了解我的问题,我需要向您展示我的数据库模型,所以在这里。

DB Model

现在你已经看过了,这就是我的问题:

我有这个查询

select SUM(e.totalEtapa) totalProyecto,
    e.idProyecto
from Etapa e
inner join EtapaPartida ep on ep.idEtapa = e.idEtapa
inner join Partida p on p.numero = ep.idPartida
    and p.version = ep.versionPartida
left join Partida b on b.numero = p.numero
    and p.version < b.version
inner join LineaRecursoPartida lrp on p.numero = lrp.numPartida
    and p.version = lrp.versionPartida
inner join LineaRecurso lr on lr.id = lrp.IdLinea
inner join Recurso r on r.codigo = lr.codigo
    and r.version = lr.version
where r.codigo = 2
    and r.version = 2
    and b.version is null
group by e.idProyecto

所以你可以看到,并且关于你我上面给你看的模型,我想要etapa上与recurso记录相关的所有记录的总和,考虑到达到它所需的所有连接。 partida的记录应该是它们的“最大版本”,在这种情况下,带有codigo = 2和version = 2的递归。所以事情是这个查询返回两倍应该的值。进行一些研究后我意识到这种情况正在发生,因为我的recurso记录与partida表上的两个记录有关,同样这些记录也与EtapaPartida表中相同的etapa记录有关。

我已经尝试使用distinct子句,在上面的查询中添加了表Etapa中的列idEtapa但没有成功。无论如何,我不喜欢使用这种条款摆脱问题,因为它可能会导致另一个问题。所以我想知道你是否有任何想法如何从etapa返回一条记录而不是关于它们是否与几个与同一个recurso记录有关的partida记录有关?

0 个答案:

没有答案