SQL-选择联接中的最后一个寄存器

时间:2018-07-31 03:11:33

标签: php sql join

我需要在联接中使用最后一个(fechaDesde字段)寄存器,我只想要最后一条记录,并且我有此表:

[relObrSocPaciente]

idPaciente  |   idObraSocial|   fechaDesde
    1       |       1       |   2018-07-29 21:49:46
    1       |       2       |   2017-07-29 21:49:46
    1       |       3       |   2019-07-30 00:00:00
    2       |       3       |   2018-07-30 21:49:46
    1       |       4       |   2001-07-29 21:49:46
    1       |       5       |   2018-07-30 23:49:46

我有这个查询:

SELECT p.idPaciente, p.nombre, p.apellido, p.email, o.descOSoc
    FROM pacientes p 
    LEFT JOIN (
            SELECT r.idPaciente, r.idObraSocial, max(r.fechaDesde) MaxDate
            FROM relObrSocPaciente r
            group by r.idPaciente ) rel on p.idPaciente = rel.idPaciente
    INNER JOIN obrasocial o ON rel.idObraSocial = o.idOSocial
    WHERE p.estado = '0'
    ORDER by rel.MaxDate DESC

问题出在内部选择中:

SELECT r.idPaciente, r.idObraSocial, max(r.fechaDesde) MaxDate
            FROM relObrSocPaciente r
            group by r.idPaciente

将带来:

idPaciente  |   idObraSocial|   fechaDesde
    1       |       1       |   2019-07-30 00:00:00
    2       |       3       |   2018-07-30 21:49:46

并且fisrt记录不在我的数据库中;应该是:

    1       |       3       |   2019-07-30 00:00:00

我的想象力不足,请帮忙。 谢谢!

1 个答案:

答案 0 :(得分:0)

已解决:

SELECT tf.idPaciente, tf.nombre, tf.apellido, tf.email, o.descOSoc, r.fechadesde
FROM pacientes tf 
LEFT JOIN relObrSocPaciente r on tf.idPaciente = r.idPaciente
LEFT JOIN obrasocial o on r.idObraSocial = o.idOSocial
WHERE r.fechaDesde in ( SELECT max( fechadesde )
                       FROM relObrSocPaciente
                       WHERE idPaciente = tf.idPaciente )