Espero que te entendí: tenemos que coincidir cada consulta de un comprador con la siguiente:
si no existe la siguiente- es "buena"
si existe una pero paso más de un mes- es "buena"
si existe una pero paso menos de un mes- es "mala".
Para coincidir cada consulta con la siguiente- utilizo este código:
Código SQL:
Ver originalWITH Ta AS
(SELECT ROW_NUMBER() OVER(Partition BY Comprador ORDER BY Fecha) N,
*
FROM #T)
SELECT *
FROM Ta T1
LEFT JOIN Ta T2
ON T1.Comprador=T2.Comprador
AND T1.N=T2.N-1;
Para obtener las calificaciones de "buena" y "mala"-
Código SQL:
Ver originalWITH Ta AS
(SELECT ROW_NUMBER() OVER(Partition BY Comprador ORDER BY Fecha) N,
*
FROM #T)
SELECT T1.Consultor,
T1.Comprador,
T1.Fecha Fecha1,
T2.Fecha Fecha2,
CASE WHEN T2.Fecha IS NULL THEN 'Buena'
WHEN DateDiff(DAY,T1.Fecha,T2.Fecha)>=31 THEN 'Buena'
ELSE 'Mala'
END Calificacion
FROM Ta T1
LEFT JOIN Ta T2
ON T1.Comprador=T2.Comprador
AND T1.N=T2.N-1;
Para contar cuantas "buenas" y "malas" tiene cada consultor:
Código SQL:
Ver originalWITH Ta AS
(SELECT ROW_NUMBER() OVER(Partition BY Comprador ORDER BY Fecha) N,
*
FROM #T),
Tb AS
(SELECT T1.Consultor,
T1.Comprador,
T1.Fecha Fecha1,
T2.Fecha Fecha2,
CASE WHEN T2.Fecha IS NULL THEN 'Buena'
WHEN DateDiff(DAY,T1.Fecha,T2.Fecha)>=31 THEN 'Buena'
ELSE 'Mala'
END Calificacion
FROM Ta T1
LEFT JOIN Ta T2
ON T1.Comprador=T2.Comprador
AND T1.N=T2.N-1)
SELECT Consultor,
SUM(CASE WHEN Calificacion='Buena' THEN 1 ELSE 0 END) Buenas,
SUM(CASE WHEN Calificacion='Mala' THEN 1 ELSE 0 END) Malas,
COUNT(*) Total
FROM Tb
GROUP BY Consultor;