Avatar billede Ulrich Seniormester
14. februar 2018 - 13:22 Der 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?

Databasen ser sådan ud:
hit_count    last_time    last_date
34    23:42:32        01-02-2018
27    23:57:34        02-02-2018
25    23:50:28        03-02-2018
29    22:53:02      04-02-2018
26    22:49:42        05-02-2018
39    23:04:30        06-02-2018
29    23:41:33        07-02-2018
27    22:27:24        08-02-2018
24    22:53:30        09-02-2018
47    23:59:11        10-02-2018
26    22:08:52        11-02-2018
30    23:28:17        12-02-2018
22    23:00:16        13-02-2018
Avatar billede Slettet bruger
14. februar 2018 - 14:15 #1
Hvornår starter din uge? Søndag eller mandag?
Avatar billede Slettet bruger
14. februar 2018 - 14:19 #2
Og din ugecounternuuge tager vel kun summen for den nuværende uge vi er i??
Avatar billede Bjarne S. Nielsen Juniormester
14. februar 2018 - 14:20 #3
Du køre det i et loop...
x=1
Do Until x > DenAktuelledag
x=x+1
Loop
Avatar billede Slettet bruger
14. februar 2018 - 14:32 #4
Værsgo:

declare @myt table (hit_count int,last_time nvarchar(50),last_date date)

insert into @myt

values


(34    ,'23:42:32',      '2018-02-01'),
(27    ,'23:57:34',      '2018-02-02'),
(25    ,'23:50:28',      '2018-02-03'),
(29    ,'22:53:02',      '2018-02-04'),
(26    ,'22:49:42',      '2018-02-05'),
(39    ,'23:04:30',      '2018-02-06'),
(29    ,'23:41:33',      '2018-02-07'),
(27    ,'22:27:24',      '2018-02-08'),
(24    ,'22:53:30',      '2018-02-09'),
(47    ,'23:59:11',      '2018-02-10'),
(26    ,'22:08:52',      '2018-02-11'),
(30    ,'23:28:17',      '2018-02-12'),
(22    ,'23:00:16',      '2018-02-13')



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.
Avatar billede Ulrich Seniormester
14. februar 2018 - 23:14 #5
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'))")
Avatar billede Ulrich Seniormester
15. februar 2018 - 12:19 #6
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
Avatar billede 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.
Avatar billede 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())
)
Avatar billede 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()))
Avatar billede 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.
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