MySQL leftjoin和ORDER
我遇到了一个mySQL查询问题 我想返回每个贷记单历史记录表中的最后一次汇率兑换 我的历史设计表记录如下:MySQL leftjoin和ORDER,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,我遇到了一个mySQL查询问题 我想返回每个贷记单历史记录表中的最后一次汇率兑换 我的历史设计表记录如下: ID | account_id| code_source | code_destination | date | taux | .. 242 | 12 | 1 | 133 | 2013-02-22 | 0.82000 | .. 243 | 12 |
ID | account_id| code_source | code_destination | date | taux | ..
242 | 12 | 1 | 133 | 2013-02-22 | 0.82000 | ..
243 | 12 | 1 | 133 | 2013-03-26 | 0.96000 | ..
244 | 12 | 1 | 133 | 2013-03-26 | 1.29000 | ..
当前,如果credit_memo.date等于2013-03-26,并且SELECT中的rate.taux返回0.82000,则我的最后一个左连接返回3行。
如何转换查询以获得1.29000,即我的左联接的最后一个值?因为我只想要最后一张唱片。
是否可以避免在左联接中使用子查询
谢谢你们的帮助,伙计们
SELECT credit_memo.code_avoir_client,
credit_memo.total_ttc,
credit_memo.date,
credit_memo.code_utilisateur,
credit_memo.montant_restant_a_payer,
DEVISE.code_iso,
PAIEMENT_FACTURE_FOURNISSEUR.date_reglement,
customer.code_client,
customer.code_utilisateur_client,
customer.prenom,
customer.raison_social,
lead.code_client,
lead.code_utilisateur_client,
lead.prenom,
lead.raison_social,
project.project_code,
project.name,
rate.taux
FROM AVOIR_CLIENT AS credit_memo
LEFT JOIN CLIENT AS customer
ON customer.code_client = credit_memo.code_client
AND customer.code_profil_client = 1
AND ( customer.account_id = 0
OR customer.account_id = 12 )
AND customer.etat = 0
LEFT JOIN CLIENT AS lead
ON lead.code_client = credit_memo.code_client
AND lead.code_profil_client = 2
AND ( lead.account_id = 0
OR lead.account_id = 12 )
AND lead.etat = 0
LEFT JOIN PROJECT AS project
ON project.project_code = credit_memo.project_code
AND ( project.account_id = 0
OR project.account_id = 12 )
AND project.etat = 0
LEFT JOIN DEVISE
ON DEVISE.code_devise = credit_memo.code_devise
AND ( DEVISE.account_id = 0
OR DEVISE.account_id = 12 )
AND DEVISE.etat = 0
LEFT JOIN PAIEMENT_FACTURE_FOURNISSEUR
ON PAIEMENT_FACTURE_FOURNISSEUR.code_avoir_client =
credit_memo.code_avoir_client
AND ( PAIEMENT_FACTURE_FOURNISSEUR.account_id = 0
OR PAIEMENT_FACTURE_FOURNISSEUR.account_id = 12 )
AND PAIEMENT_FACTURE_FOURNISSEUR.etat = 0
LEFT JOIN ETABLISSEMENT AS eta
ON eta.code_etablissement =
credit_memo.code_etablissement
AND ( eta.account_id = 0
OR eta.account_id = 12 )
LEFT JOIN HISTORIQUE_DEVISE AS rate
ON rate.code_etablissement =
credit_memo.code_etablissement
AND rate.CODE_DEVISE_SOURCE = credit_memo.CODE_DEVISE
AND rate.CODE_DEVISE_DESTINATION = eta.CODE_DEVISE
AND rate.date <= credit_memo.date
AND ( rate.account_id = 0
OR rate.account_id = 12 )
AND rate.etat = 0
WHERE ( credit_memo.account_id = 0
OR credit_memo.account_id = 12 )
AND credit_memo.etat = 0
GROUP BY credit_memo.code_avoir_client ;
您可以通过添加一个where子句来删除其他行。您的SQL对我来说有点复杂,需要更多的知识才能理解,但通常where子句是这样的:
AND NOT EXISTS
(Select *
From HISTORIQUE_DEVISE rate_2
WHERE rate.accoun_id=rate_2.accountid
... add other keys fields here if they need to be equal ...
AND rate_2.ID > rate.ID
)
换言之,在HISTORIQUE_Desive中找到匹配记录但ID更高的记录除外