14. februar 2018 - 13:22Der er
9 kommentarer og 1 løsning
Hente SUM ud for enkelte dage i en uge.
Har en MS database hvor der tælles antal besøgende på en .asp side. Ny record for hver dag. hit_count = tæller op for antal besøgende last_date = dags dato 14-02-2018, ny record for hver dag
Her henter jeg SUM ud for nuværende uge: ugecounternuuge = conncounter.execute("select SUM(hit_count) AS totale FROM hit_count_day_month_year WHERE DatePart('ww',last_date,'2') = DatePart('ww',Now(),'2')")
Her henter jeg SUM ud for sidste uge: ugecounterenugetilbage = conncounter.execute("select SUM(hit_count) AS totale FROM hit_count_day_month_year WHERE DatePart('ww',last_date,'2') = DatePart('ww',DateAdd('ww',-1,Now()),'2')")
Nu kommer mit spørgsmål: Hvis jeg i nuværende uge er fx torsdag, så får jeg SUM for mandag, tirs, ons og torsdag. Variabel ugecounterenugetilbage indeholder SUM for hele sidste uge og de to tal sammenlignet er ikke helt rigtigt da jeg kune skulle have SUM for mandag, tirs, ons og torsdag fra sidste uge også.
Er der nogen der kan hjælpe men en SQL streng lidt ala den ugecounterenugetilbage hvor den så kun tager SUM af de dage der er gået i den uge vi er i?
Select SUM(hit_count) as totale from ( select *,DATEPART(ww,last_date) as WeekNo,DATEPART(weekday,last_date) as WeekDays,DATEPART(ww,dateadd(ww,-1,GETDATE())) as PrevWeek from @myt )x where WeekNo = PrevWeek and WeekDays in (select DATEPART(weekday,last_date) as WeekDays from @myt where DATEPART(ww,last_date) = DATEPART(ww,getdate()) )
Tag dog lige højde for at weekday starter på en søndag, så hvis du vil have det til at starte en mandag, skal der lige tages højde for dette. Men denne SQL selecter din sum fra de antal dage du er i den nuværende uge fra sidste uge.
Min uge starter mandag, og ugecounternuuge tager kun summen for den nuværende uge vi er i.
Tak for streng, jeg prøver.
DET VIRKER !!! Mange tak for hjælpen. Her er resultatet: testaa = conncounter.execute("Select SUM(hit_count) as totale from (select *,DATEPART('ww',last_date,'2') as WeekNo,DATEPART('w',last_date,'2') as WeekDays,DATEPART('ww',dateadd('ww',-1,Now())) as PrevWeek from hit_count_day_month_year)x where WeekNo = PrevWeek and WeekDays in (select DATEPART('w',last_date,'2') as WeekDays from hit_count_day_month_year where DATEPART('ww',last_date,'2') = DATEPART('ww',Now(),'2'))")
Muligt et dumt spørgsmål, men kan ikke helt gennemskue streng. Det virker som det skal men prøver også at sætte mig ind i løsningen.
Hvad gør 'X lige før where' i strengen? from hit_count_day_month_year)x where WeekNo = PrevWeek
Synes godt om
Slettet bruger
15. februar 2018 - 12:31#7
X'et er dit alias for din ydre select. Select x.kolonner from ( select * from tablea) x Så dit X henføre til de kolonner du vælger fra din indre select.
Synes godt om
Slettet bruger
15. februar 2018 - 12:40#8
Det er også det man i SQL termer kalder SUBselects. Og det er simpelthen for renhedensskyld jeg gør det. Man kunne også skrive en CTE som fungere på samme måde som et view basically.
with sidsteugenuværendedage as (
select *,DATEPART(ww,last_date) as WeekNo,DATEPART(weekday,last_date) as WeekDays,DATEPART(ww,dateadd(ww,-1,GETDATE())) as PrevWeek from @myt )
Select SUM(hit_count) as totale from sidsteugenuværendedage where WeekNo = PrevWeek and WeekDays in (select DATEPART(weekday,last_date) as WeekDays from @myt where DATEPART(ww,last_date) = DATEPART(ww,getdate()) )
Synes godt om
Slettet bruger
15. februar 2018 - 12:41#9
Og der skulle selvfølgelig stå with sidsteugenuværendedage as (
select *,DATEPART(ww,last_date) as WeekNo,DATEPART(weekday,last_date) as WeekDays,DATEPART(ww,dateadd(ww,-1,GETDATE())) as PrevWeek from @myt )
Select SUM(hit_count) as totale from sidsteugenuværendedage where WeekNo = PrevWeek and WeekDays in (select DATEPART(weekday,last_date) as WeekDays from sidsteugenuværendedage where DATEPART(ww,last_date) = DATEPART(ww,getdate()))
Synes godt om
Slettet bruger
15. februar 2018 - 12:51#10
Lige en kommentar til. Du kan vælge at kalde dig alias hvad som helst. Der kunne have stået x eller p eller et navn. Det er blot et alias for at du kan referer til dine kolonner.
CTE fungere lidt på samme måde. Her navngiver du din CTE, hvor i du skriver noget kode, som sådan set fungere som et view så det sker hele tiden runtime at den eksekverer din kode. Herefter skriver man så sin SELECT statements op i mod sin CTE. CTE er noget mere læse venlige end subselects. Men det er en smagssag.
Synes godt om
1 synes godt om dette
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.