webForumDet fria alternativet

MS SQL - Gruppera datum per vecka

Databaser & SQL

2 svar · 994 visningar · startad av Sjodahl

Medlem sedan maj 20033 218 inlägg
Frågan#1

Hej,

Finns det något smidigt sätt om man har en tabell som bland annat innehåller ett fält för datum att gruppera efter dessa och antalet?

2010-01-01
2010-01-01
2010-01-01
2010-01-03

2010-01-08
2010-01-08
2010-01-08

Gruppering
Vecka1: 4st
Vecka2: 3st

Medlem sedan aug. 20039 340 inlägg
#2
SELECT count(*), DATEPART(wk, datum)
FROM tabell 
GROUP BY DATEPART(wk, datum);

Detta bör dock räkna söndag som veckans första dag, samt inte numrera veckorna som vi gör.
Prova t ex detta eller detta för att komma runt det problemet.

Medlem sedan maj 20033 218 inlägg
#3

Tackar!

SET DATEFIRST 1 -- for monday
SELECT count(ProjectDataId) AS Number, dbo.isoweek(PreliminaryVerificationPlanned) AS WeekNr
FROM dbo.tblProjectData 
WHERE PreliminaryVerificationPlanned IS NOT NULL
GROUP BY PreliminaryVerificationPlanned
CREATE FUNCTION [dbo].[isoweek] (@DATE datetime) 
RETURNS INT 
WITH EXECUTE AS caller 
AS 
BEGIN 
     DECLARE @ISOweek INT 
      
      
     SET @ISOweek= datepart(wk,@DATE)+1 
          -datepart(wk,CAST(datepart(yy,@DATE) AS CHAR(4))+'0104') 
           
--Special cases: Jan 1-3 may belong to the previous year 
     IF (@ISOweek=0) 
          SET @ISOweek=dbo.isoweek(CAST(datepart(yy,@DATE)-1 
               AS CHAR(4))+'12'+ CAST(24+datepart(DAY,@DATE) AS CHAR(2)))+1 
--Special case: Dec 29-31 may belong to the next year 
     IF ((datepart(mm,@DATE)=12) AND 
          ((datepart(dd,@DATE)-datepart(dw,@DATE))>= 28)) 
          SET @ISOweek=1 
           
           
           
           
     RETURN(@ISOweek) 
END;
267 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)