Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL leftjoin和ORDER_Mysql_Sql_Join_Left Join - Fatal编程技术网

MySQL leftjoin和ORDER

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 |

我遇到了一个mySQL查询问题

我想返回每个贷记单历史记录表中的最后一次汇率兑换

我的历史设计表记录如下:

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更高的记录除外