Avatar billede prhan Juniormester
30. september 2015 - 10:57 Der er 6 kommentarer og
1 løsning

Antal poster over en periode på 6 mdr, for hver måned

Med følgende data:
År    Måned    Sendt    Type
2015    9    22-09-2015    Overholdt
2015    9    21-09-2015    Overholdt
2015    8    21-08-2015    Overholdt
2015    7    24-07-2015    Overholdt
2015    7    24-07-2015    Overholdt
2015    7    02-07-2015    Overholdt
2015    6    22-06-2015    Overholdt
2015    6    22-06-2015    Overholdt
2015    6    15-06-2015    Overholdt
2015    5    13-05-2015    Overholdt
2015    5    05-05-2015    Overholdt
2015    3    25-03-2015    Overholdt
2015    3    25-03-2015    Overholdt
2015    3    18-03-2015    Overholdt
2015    3    11-03-2015    Overholdt
2015    2    05-02-2015    Overholdt
2015    2    03-02-2015    Overholdt
2015    2    03-02-2015    Overholdt
2015    1    19-01-2015    Overskredet
2014    12    19-12-2014    Overholdt
2014    11    25-11-2014    Overskredet
2014    11    20-11-2014    Overholdt
2014    11    18-11-2014    Overholdt
2014    11    17-11-2014    Overholdt
2014    11    14-11-2014    Overholdt
2014    11    14-11-2014    Overholdt
2014    11    13-11-2014    Overholdt
vil jeg gerne, for hver måned, beregne (antal 'Overholdt')/antal over en periode på 6 mdr tilbage.
F.eks. vil År= 2015 og Måned= 5 give (10/11)
Hvis År = 2015 og Måned = 7 vil det give (15/15)
Hvis År = 2015 og Måned = 1 skal det give null, da der ikke er data for 6 mdr tilbage.

Kan det lade sige gøre?
Avatar billede Slettet bruger
30. september 2015 - 13:33 #1
Hvis du har SQL Server 2012 kan det kan løses med Analytic Functions.
https://msdn.microsoft.com/en-us/library/ms189461.aspx
Avatar billede prhan Juniormester
30. september 2015 - 13:52 #2
Og hvis det er i 2005?
Avatar billede Slettet bruger
30. september 2015 - 14:31 #3
Kan stadig løses - bare lidt mere besværligt.
Jeg kigger på det....
Avatar billede Slettet bruger
30. september 2015 - 15:00 #4
Her er en løsning:

with x as (
select År, Måned, max(År*12+Måned) Idx
, count(*) Ialt
,sum(case when Type = 'Overholdt' then 1 else 0 end) Overholdt
from tabel
group by År, Måned
)
select s.År, s.Måned
,(sum(Overholdt) from x
  where Idx >= s.Idx-5
    and Idx <= s.Idx
    and exists(select null from x where Idx <= s.Idx-5)
) Overholdt
,(sum(Ialt) from x
  where Idx >= s.Idx-5
    and Idx <= s.Idx
    and exists(select null from x where Idx <= s.Idx-5)
) Ialt
from x as s
Avatar billede prhan Juniormester
30. september 2015 - 16:15 #5
Jeg kan ikke lige få det til at virke. Det er ellers imponerende.

Vi opgradere snart til 2012.

Er syntaksen mere overskuelig der?
Er du frisk på at give et forsøg igen i 2012 version?
Avatar billede Slettet bruger
30. september 2015 - 17:11 #6
Du skal kun rette i den første select. Her skal du rette tabel og sørge for at År og Måned er heltal.

Jeg gerne lave en 2012 version også
Avatar billede prhan Juniormester
06. oktober 2015 - 08:19 #7
Ville du prøve en 2012 version?

Ellers så lukker jeg bare issuet og du får selvfølgelig svaret for det tidligere.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester