我在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'