Condiciones MySQL de varias filas

He estado tratando de calcular una tabla utilizando unaSELECT declaración. Tengo una mesa como esta:

--------------------------------------------------------------
AgentID     |      Date      |  Incurred     |    FallOffDate
==============================================================
kegomez     |   2012-11-19   |     2.0       |    2013-11-19
kegomez     |   2012-11-24   |     0.5       |    2013-11-24
kegomez     |   2013-01-21   |     2.0       |    2014-01-21
kegomez     |   2013-08-18   |     2.0       |    2014-08-18

Estaba intentando realizar los cálculos durante la selección y posiblemente crear una vista, pero hasta ahora no he tenido suerte. Al final la mesa se verá así.

--------------------------------------------------------------
AgentID     |      Date      |  Incurred     |    90    |    180    |   Total    |    FallOffDate
==============================================================
kegomez |   2012-11-19   |     2.0       |    2.0   |    2.0    |   2.0      |    2013-11-19
kegomez |   2012-11-24   |     0.5       |    0.5   |    0.5    |   2.5      |    2013-11-24
kegomez |   2013-01-21   |     2.0       |    1.0   |    0.0    |   2.5      |    2014-01-21
kegomez |   2013-08-18   |     2.0       |    2.0   |    2.0    |   4.5      |    2014-08-18

La columna total utiliza valores de la fila anterior para calcular sus valores. Por ejemplo, la fecha en la fila 4 deberá hacer referencia a la fecha en la fila 3 para ver si la fecha es mayor. ¿Tendría que intentar esto con una subconsulta? La forma en que esto funcionará eventualmente es que cada 90 días hasta 180 días el agente perderá 1 punto si no se incurre en más. Por lo tanto, la razón por la que necesito hacer referencia a otras filas. Si ayuda, estos datos se encuentran actualmente en Excel pero se están volviendo demasiado grandes para administrar y debemos pasarlos a algo que funcione mejor.

SELECT AgentID, Date, Incurred, 
    @90 := IF(Date<=CURDATE()-90 AND @r=0, Incurred-1.0, IF(Difference>90, Incurred-1, Incurred)) AS 90Day, 
    @180 := IF(Date<=CURDATE()-90 AND @r=0, Incurred-1.0, IF(Difference>180, Incurred-2, @90)) AS 180Day, 

    @Total := IF(@180<0,0,IF(FallOffDate<=CURDATE(),0, @180)) AS Total,

    FallOffDate 

FROM (SELECT  mo.AgentID, mo.Incurred, FallOffDate, 
        @r AS LEAD_date,
        DATEDIFF(@r,Date) AS Difference,
        (@r := Date) AS Date

FROM    (
        SELECT  m.*
        FROM    (
                SELECT  @_date = NULL
                ) VARIABLE,
                attendance m
        ORDER BY
                AgentID, Date DESC 
        ) mo
WHERE  (CASE WHEN @_date IS NULL OR @_date <> date THEN @r := NULL ELSE NULL END IS NULL)
        AND (@_date := date) IS NOT NULL) T
ORDER BY AgentID, Date;

Respuestas a la pregunta(1)

Su respuesta a la pregunta