2012-07-13 18 views
1

這個查詢讓人JOIN代替LEFT JOIN,但我不知道該怎麼辦呢 whitout使用cierre_mensual表何在條款:左加入成爲一個隱式加入我如何fixit?

SELECT last_odometro.equipo, IFNULL(SUM(cierre_mensual.recorrido),0) + 
     last_odometro.recorrido AS ultimo_odometro 
FROM (
    SELECT * 
    FROM `cierre_mensual` 
    WHERE mes < '2012-03-01' 
    AND `tipo_de_recorrido` 
    IN (1, 3) 
    GROUP BY `equipo` 
    HAVING MAX(mes) 
) AS last_odometro 
LEFT JOIN 
    `cierre_mensual` ON last_odometro.`equipo` = cierre_mensual.`equipo` 
WHERE 
     cierre_mensual.mes > last_odometro.mes 
    AND cierre_mensual.mes < '2012-03-01' 
GROUP BY `last_odometro`.`equipo` 

表中的字段有: ID EQUIPO MES combustible_en_tanque recorrido tipo_de_recorrido

1)我想找到recorrido白衣最後MES(日期),其tipo_de_recorrido是(1,3) 2)如果存在

equipo mes  combustible_en_tanque recorrido tipo_de_recorrido 
7 2011-07-01 4 100  2 
7 2011-07-01 4 100  2 
7 2011-08-01 4 193900 1 
7 2011-09-01 4 194000 1 <- the last row of type 1 194000 
7 2011-10-01 4 100  2 +=100 
7 2011-11-01 4 100  2 +=100 
7 2011-12-01 4 100  2 +=100 
7 2012-01-01 7 150  2 +=150 
7 2012-02-01 4 50 2  +=50 
求和recorrido其餘蒙山更大的MES 0

它的回報:

equipo ultimo_odometro 
    7  195150 

但如果:

7 2011-07-01 4 100  2 
7 2011-07-01 4 100  2 
7 2011-08-01 4 193900 1 
7 2011-09-01 4 194000 1 <- the last row of type 1 194000 
no more rows whit type!=(1,2) 

必須回到19.4,但加入失敗。

+0

你也可以完成與上次(1,3)記錄的'UNION'和記錄的其餘部分作爲子查詢,然後求和所有的值。 – mellamokb 2012-07-13 20:34:20

回答

4

您可以從WHERE子句的LEFT JOINON條款移動條件:

LEFT 
JOIN `cierre_mensual` 
    ON last_odometro.`equipo` = cierre_mensual.`equipo` 
AND cierre_mensual.mes > last_odometro.mes 
AND cierre_mensual.mes < '2012-03-01'