04. april 2011 - 16:19Der er
3 kommentarer og 1 løsning
markering hvis medlem i periode
Jeg har en tabel med medlemsnummer samt start-(indmeldelses) og slut-(udmeldelses) dato..
Hvis jeg nu gerne vil lave statistik, som kan overføres til SSRS, over hvor mange der er medlemmer hvert enkelt uge (lad os sige to år tilbage) hvordan løser jeg så nemmest dette?..
jeg har forsøgt mig med en CASE struktur, men syntes den bliver for uoverskuelig hvis jeg skal lave (52*2) 104 cases..
SELECT m.userMemberNumber, m.startdate, m.endDate, CASE WHEN m.startDate <= Getdate() AND m.endDate > Getdate() THEN '1' ELSE ' ' END AS i_dag, CASE WHEN m.startDate <= ( Getdate() - 7 ) AND m.endDate > ( Getdate() - 7 ) THEN '1' ELSE ' ' END AS sidste_uge ......... FROM Membership m;
Her et bud på en, måske ikke optimal, men nemt forståelig løsning (synes jeg selv) med en hjælpetabel der indeholder startdatoer på ugerne. Derefter checkes der på medlemskaber der enten krydser start eller slut på en uge samt medlemskaber der ligger indenfor ugen:
declare @weekstartdates table (weekStartDate datetime) while @firstdate <= getdate() begin insert into @weekstartdates values( @firstDate) select @firstdate = dateadd(dd,7,@firstdate) end
select * from @weekstartdates
select weekStartDate, count(*) from @Membership m join @weekstartdates w on -- medlemskab krydser ugestart: (m.startdate < w.weekStartDate and m.endDate >= w.weekstartdate) -- medlemskab ligger inden for ugen or (m.startdate >= w.weekstartdate and m.endDate < dateadd(dd,7,w.weekstartdate)) -- medlemskab krydser ugeslut or (m.startdate < dateadd(dd,7,w.weekstartdate) and m.endDate >= dateadd(dd,7,w.weekstartdate)) group by weekStartDate
Jeg lægger et svar (denne post) som du accepterer - super at det kunne bruges til noget.
Synes godt om
Ny brugerNybegynder
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.