内部JOIN只是最后的结果

时间:2015-11-03 14:28:34

标签: mysql

我只是编辑我的旧代码并尝试进行很好的复杂查询。

我的查询如下:

SELECT axnmrs_cases.claimnumber as claim, axnmrs_cases.vin as vin, axnmrs_cases.date_created as date, axnmrs_calculations.totalcosts as totalcosts, axnmrs_cases.country as country
                    FROM axnmrs_cases
                    INNER JOIN axnmrs_calculations ON ( axnmrs_cases.case_id = axnmrs_calculations.case_id
                    AND axnmrs_cases.country = axnmrs_calculations.country ) 
                    WHERE vin = :vin

这样可以显示结果,结果是否完美(即使我不能相信它:D),但我需要最后的计算而不是所有这些。

                INNER JOIN axnmrs_calculations ON ( axnmrs_cases.case_id = axnmrs_calculations.case_id
                AND axnmrs_cases.country = axnmrs_calculations.country ) ORDER BY axnmrs_calculations.calculation_id DESC LIMIT 1

但是我不确定如何限制INNER JOIN而不是整个查询,有人可以告诉我吗?

由于

1 个答案:

答案 0 :(得分:0)

如果你想要每个case_id和country进行最后一次计算,那么你需要创建一个派生表(from子句中的子查询)来获取这些,然后你加入这个派生表上的case和computation表。

您需要在计算表中使用自动增量ID或时间戳,或者标识最后一个计算版本的标志。我假设你在计算表中有一个自动增量id字段:

SELECT axnmrs_cases.claimnumber as claim, axnmrs_cases.vin as vin, axnmrs_cases.date_created as date, axnmrs_calculations.totalcosts as totalcosts, axnmrs_cases.country as country
FROM axnmrs_cases
INNER JOIN axnmrs_calculations AS ac ON ( axnmrs_cases.case_id = ac.case_id AND axnmrs_cases.country = ac.country )
INNER JOIN (SELECT MAX(id) AS maxid, case_id, country FROM axnmrs_calculations GROUP BY case_id, country) AS T
ON ac.id=T.maxid and ac.case_idóT.case_id and ac.country=T.country
WHERE vin = :vin
相关问题