我在MySql中有3个左联接表。

contratos,用于存储客户数据

funcionario,用于存储员工数据

cobranca,用于存储每个客户的费用。

我想根据费用status生成报告。但是每个客户收费都有很多status,我想检索当前的status

以下代码返回cobrancas表中的最新更新。

SELECT cob.status, cob.created, con.data_venda, cpn.contrato, con.razao_social, con.cnpj, con.valor, f.nick
FROM cobrancas cob
LEFT JOIN contratos con
ON c.id = cob.contrato
LEFT JOIN funcionarios f
ON f.id = cob.cobrador
WHERE 1=1
ORDER BY cob.created DESC
LIMIT 1


但是它返回时没有status过滤器。如果我放置一个像cob.status = 'x'的WHERE子句,它将返回带有该status的最后一条记录,但它可能不是当前的。那么,如何检查WHERE子句中的cob.status是当前的status,以决定是否将其放入列表中?就像是:

WHERE IF(cob.status == the last status inserted AND cob.status == 'x')

你能理解我想做什么吗?谢谢。

最佳答案

一种使用子查询的解决方案

select * from
(
SELECT cob.status, cob.created, con.data_venda, cpn.contrato, con.razao_social, con.cnpj, con.valor, f.nick
FROM cobrancas cob
LEFT JOIN contratos con
ON c.id = cob.contrato
LEFT JOIN funcionarios f
ON f.id = cob.cobrador
WHERE 1=1
ORDER BY cob.created DESC
LIMIT 1
) where status = 'X'

10-05 19:54