El siguiente código devuelve el número de tickets resueltos y el número de tickets abiertos para un período (el período es YYYY, WW) que se remonta un determinado número de días. Por ejemplo, si @NoOfDays es 7:Creación de una línea de tendencia desde el conjunto de datos SQL
resolved | abierto | semana | año | período
56 | 30 | 13 | 2012 | 2012, 13
237 | 222 | 14 | 2012 | 2012, 14
'resuelto' y 'abierto' se grafican en las líneas (y) durante el período (x). Me gustaría agregar otra columna 'tendencia' que arrojaría un número que, cuando se graficó durante un período, será una línea de tendencia (regresión lineal simple). I do desea utilizar ambos conjuntos de valores como una fuente de datos para la tendencia.
Este es el código que tengo:
SELECT a.resolved, b.opened, a.weekClosed AS week, a.yearClosed AS year,
CAST(a.yearClosed as varchar(5)) + ', ' + CAST(a.weekClosed as varchar(5)) AS period
FROM
(SELECT TOP (100) PERCENT COUNT(DISTINCT TicketNbr) AS resolved, { fn WEEK(date_closed) } AS weekClosed, { fn YEAR(date_closed) } AS yearClosed
FROM v_rpt_Service
WHERE (date_closed >= DateAdd(Day, DateDiff(Day, 0, GetDate()) - @NoOfDays, 0))
GROUP BY { fn WEEK(date_closed) }, { fn YEAR(date_closed) }) AS a
LEFT OUTER JOIN
(SELECT TOP (100) PERCENT COUNT(DISTINCT TicketNbr) AS opened, { fn WEEK(date_entered) } AS weekEntered, { fn YEAR(date_entered)
} AS yearEntered
FROM v_rpt_Service AS v_rpt_Service_1
WHERE (date_entered > = DateAdd(Day, DateDiff(Day, 0, GetDate()) - @NoOfDays, 0))
GROUP BY { fn WEEK(date_entered) }, { fn YEAR(date_entered) }) AS b ON a.weekClosed = b.weekEntered AND a.yearClosed = b.yearEntered
ORDER BY year, week
Editar:
Según serc.carleton.edu/files/mathyouneed/best_fit_line_dividing.pdf, parece que quiero romper los datos a la mitad, luego calcule el promedio. Entonces necesito encontrar la línea que mejor se ajuste, y usar la pendiente y la intersección con el eje y para calcular los valores necesarios para regresar en 'tendencia' usando y = mx + b
?
Sé que esto es muy posible en SQL, sin embargo, el programa en el que estoy insertando el SQL tiene limitaciones en lo que puedo hacer.
Los puntos rojos y azules son los números que estoy devolviendo ahora (abiertos y resueltos). Necesito devolver un valor para cada período en 'tendencia' para crear la línea violeta. (Esta imagen es hipotético)
¿Esto es para MS SQLServer, o para un RDBMS diferente? –
MS SQLServer es correcto. –