Jeg går ud fra at det er én samlet gennemsnitsværdi du vil have:
SELECT AVG(CONVERT(float, DATEDIFF(day, start, slut))) FROM ( SELECT nr, MIN(dato) AS start, MAX(dato) AS slut FROM status WHERE status IN (7, 1, 2) GROUP BY nr ) AS tmp WHERE MONTH(slut) = 9
Samtidig skal den jo ikke tælles sammen hvis der ikke er en afsluttet dato.
Jeg syntes det ser ud til at WHERE status IN (7, 1, 2) regner sammen selvom der ikke er afsluttet status. bare der er en startdato. Og det har alle nr.
WHERE-delen er med fordi vi kun interesserer os for netop de statusser. Samtidig laver vi GROUP BY nr. Dermed kommer der kun én række pr. værdi af nr. I den række tager vi så den første og den sidste dato som hhv. start og slut. Derefter regner vi på de to datoer i den ydre SELECT.
Jeg har sat en betingelse ind om at der skal være præcis to rækker pr. værdi af nr med status 1, 2 eller 7. Altså enten en række 7 og en række 1 ELLER en række 7 og en række 2.
SELECT AVG(CONVERT(float, DATEDIFF(day, start, slut))) FROM ( SELECT nr, MIN(dato) AS start, MAX(dato) AS slut FROM status WHERE status IN (7, 1, 2) GROUP BY nr HAVING COUNT(*) = 2 ) AS tmp WHERE MONTH(slut) = 9 AND slut IS NOT NULL
Hmm - HAVING COUNT(*) = 2 - sikrer den ikke bare at der minimum skal være 2 status? Eller er det mig der tager fejl?
Der kan godt være en masse mellemliggende status. så antallet af status kan være 1,2 5, 10 osv. uden at den er afsluttet! Der skal tjekkes om der status er 1 eller 2 før den tælles med.
Den sikrer, sammen med WHERE-delen, at der er præcis to forekomster af status 1, 2 og 7. Hvis der er sådan, at sagen altid startes med status 7 og altid afsluttes med enten status 1 eller status 2, så skulle det virke. Hvis en sag kan have både en status 1 og en status 2, så dur det ikke (men det kan det nok komme til...)
Nåja, det er bare en regnefejl. Der skal lægges 1 til DATEDIFF'en:
SELECT AVG(CONVERT(float, DATEDIFF(day, start, slut) + 1)) FROM ( SELECT nr, MIN(dato) AS start, MAX(dato) AS slut FROM status WHERE status IN (7, 1, 2) GROUP BY nr HAVING COUNT(*) = 2 ) AS tmp WHERE MONTH(slut) = 9
Nu tæller både start- og slutdatoen med i varigheden.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.