---
title: "Summera besökare mellan två veckor"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/167756-summera-besökare-mellan-två-veckor"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "doggelito"
published: "2008-01-03T16:28:54.000Z"
updated: "2008-01-04T09:08:34.000Z"
replies: 5
views: 475
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/167756-summera-besökare-mellan-två-veckor"
---

# Summera besökare mellan två veckor

## #1 — doggelito, 2008-01-03T16:28Z

Jag försöker summera antal besökare en site har haft veckovis men har kört fast.

```
ALTER PROCEDURE [dbo].[Stat_GetWeekUniqueVisitors]
	@StartDate datetime = NULL,
	@EndDate datetime = NULL
AS
BEGIN
	SET NOCOUNT ON;
	SET DATEFIRST 1;

	SELECT SUM(CntVisitors) AS CntVisitors, YEAR(CurrentDate) AS CurrentYear, CurrentMonth=0, 
		CurrentWeek = DATEPART(WW,CurrentDate), CurrentDay=0
	FROM vw_Stat_UniqueVisitors
	WHERE (CurrentDate BETWEEN @StartDate AND @EndDate)
	GROUP BY YEAR(CurrentDate), DATEPART(WW,CurrentDate)
	ORDER BY YEAR(CurrentDate), DATEPART(WW,CurrentDate)
END
```

Får detta resultat:

```
[Stat_GetWeekUniqueVisitors] '2007-12-10', '2008-01-06'

12	2007	0	52	0
3	2007	0	53	0
19	2008	0	1	0
```

Jag får alltså 3 st vecka 53, 2007 samt 19 st v. 1, 2008 men detta är samma vecka så de borde mao. slås ihop! Går det att stuva om koden så att den summerar veckorna rätt?

(ms sql 2005)

Permalänk: https://www.webforum.nu/p/167756

## #2 — Peter S, 2008-01-03T16:57Z

Du får omvandla till ISO-veckor:

> **http://www.tek-tips.com/viewthread.cfm?qid=1244574&page=1 skrev:**
>
> ```
> CREATE FUNCTION ISOWeek (@TheDate smalldatetime)
> RETURNS int
> AS
> BEGIN
>    DECLARE @D int, @D2 int
>    SET @D = Convert(int, DateAdd(dd, DateDiff(dd, 0, @TheDate), 0))
>    SET @D = @D - @D % 7 + 3
>    SET @D2 = Convert(int, DateAdd(yy, DateDiff(yy, 0, DateAdd(dd, @D, 0)), 0))
>    SET @D2 = @D2 + 6 - (@D2 - 4) % 7
>    RETURN (@D - @D2) / 7 + 1
> END
> ```

Permalänk: https://www.webforum.nu/p/2067726

## #3 — doggelito, 2008-01-03T17:10Z

Njae, så hade jag först men det håller tyvärr inte (eller?) eftersom att startdatum kan vara ex. 1:a veckan 2007 och slutdatum kan vara 3:e veckan 2008.
Det innebär att det finns 2 st vecka 1, både 2007 samt 2008 och dessa får inte slås ihop.
En snabb (ful) fix kan se ut så här:

```
ALTER PROCEDURE [dbo].[Stat_GetWeekUniqueVisitors]
	@StartDate datetime = NULL,
	@EndDate datetime = NULL
AS
BEGIN
	SET NOCOUNT ON;
	SET DATEFIRST 1;

	WITH CTE_Weeks AS (
		SELECT SUM(CntVisitors) AS CntVisitors, 
			CASE DATEPART(WW,CurrentDate) WHEN 53 THEN
				 YEAR(CurrentDate)+1 
				ELSE 
					YEAR(CurrentDate) END AS CurrentYear, 
			CurrentMonth=0, 
			CASE DATEPART(WW,CurrentDate) WHEN 53 THEN
				1 
			ELSE 
				DATEPART(WW,CurrentDate) END AS CurrentWeek,
			CurrentDay=0
		FROM vw_Stat_UniqueVisitors
		WHERE (CurrentDate BETWEEN @StartDate AND @EndDate)
		GROUP BY YEAR(CurrentDate), DATEPART(WW,CurrentDate)
	)

	SELECT SUM(CntVisitors), CurrentYear, CurrentMonth, CurrentWeek, CurrentDay
	FROM CTE_Weeks
	GROUP BY CurrentYear, CurrentMonth, CurrentWeek, CurrentDay
	ORDER BY CurrentYear, CurrentWeek
	
END
```

Jag vet inte om den kommer att funka på alla sorters datum men den funkar på ovanstående i alla fall! Men snyggt? Nää!

Permalänk: https://www.webforum.nu/p/2067730

## #4 — Peter S, 2008-01-03T17:18Z

Nu hänger jag inte med. Varför fungerar inte:

```
ALTER PROCEDURE [dbo].[Stat_GetWeekUniqueVisitors]
	@StartDate datetime = NULL,
	@EndDate datetime = NULL
AS
BEGIN
	SET NOCOUNT ON;
	SET DATEFIRST 1;

	SELECT SUM(CntVisitors) AS CntVisitors, YEAR(CurrentDate) AS CurrentYear, CurrentMonth=0, 
		CurrentWeek = ISOWeek(CurrentDate), CurrentDay=0
	FROM vw_Stat_UniqueVisitors
	WHERE (CurrentDate BETWEEN @StartDate AND @EndDate)
	GROUP BY YEAR(CurrentDate), ISOWeek(CurrentDate)
	ORDER BY YEAR(CurrentDate), ISOWeek(CurrentDate)
END
```

?

Permalänk: https://www.webforum.nu/p/2067734

## #5 — doggelito, 2008-01-03T23:09Z

Därför! ;)
Resultatet blir i ditt fall så här:

```
3	2007	0	1	0
12	2007	0	52	0
19	2008	0	1	0
```

Och det är fel eftersom det inte finns några besök alls v1. 2007.
Korrekt resultatet ska bli så här:

```
12	2007	0	52	0
22	2008	0	1	0
```

Eftersom flera år kan hämtas så kan jag inte bara köra isoweek på veckorna eftersom det grupperas årsvis också!

Permalänk: https://www.webforum.nu/p/2067805

## #6 — LarsG, 2008-01-04T09:08Z

Du får väl göra en isoyear-funktion som patchar om året till nästa om isoweek blir 1 för ett datum i december.

Permalänk: https://www.webforum.nu/p/2067831

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/167756-summera-besökare-mellan-två-veckor
