webForumDet fria alternativet

MS SQL - Gruppera datum per vecka

2 svar · 992 visningar · startad av Sjodahl

SjodahlMedlem sedan maj 20033 137 inlägg
#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

nitro2k01Medlem sedan aug. 20037 630 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.

SjodahlMedlem sedan maj 20033 137 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;
Genererad på 362 ms · cache AV · v20260730165559-full.f96bc7eb