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
14. februar 2018 - 14:15 #1
Hvornår starter din uge? Søndag eller mandag?
14. februar 2018 - 14:19 #2
Og din ugecounternuuge tager vel kun summen for den nuværende uge vi er i??
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
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.
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'))")
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
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.
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())
)
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()))
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.
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

Opret Preview

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





Premium
Test: Kæmpestort gaming-headset er perfekt til dine lange Teams-møder - men har også nogle besværligheder
Længe før vi andre blev slået hjem til hjemmekontorets endeløse webmøder har gamerne gennemskuet behovet for komfortabelt grej. Så vi tog danske EPOS top gamingheadset med på arbejde. Læs testen her.
Computerworld
Biden sender skjult besked til kode-folket: "Hvis du læser dette, har vi brug for din hjælp”
En stående invitation er blevet opdaget i kildekoden på Det Hvide Hus' hjemmeside. Men den er kun til de eksperter, der selv kan finde den.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
White paper
Sådan outsourcer du effektivt – og undgår fælderne
Nogle outsourcer for at minimere omkostningsniveauet, andre for at skaffe ressourcer og spidskompetencer, der er svære at skaffe lokalt – eller af en helt tredje årsag. Der er dog talrige forhold, der er gode at afdække, før man overhovedet begynder at lede en outsourcingudbyder. Man skal klarlægge egne projektbehov samt de spørgsmål og krav, man vil stille samt indsamle viden og erfaringer om, hvordan samarbejdet indledes, drives og styres optimalt. Dertil skal man kende til de hyppigste faldgruber, der kan få et ellers lovende outsourcingsamarbejde til at køre i grøften.