Hi Lyn,
this is what i hav etried, but getting wrong reult
DECLARE @users TABLE(UserID int, Name varchar(50))
insert into @Users
select 1,'Member1' union all
select 2,'Member2' union all
select 3,'Member3' union all
select 4,'Member4' union all
select 5,'Member5' union all
select 6,'Member6'
DECLARE @Calendar TABLE
(CalendarDate Date Primary key, IsWeekend Bit, YearNo SmallInt, QuarterNo TinyInt, MonthNo TinyInt, DayOfYearNo SmallInt, DayNo TinyInt, WeekNo TinyInt, WeekDayNo TinyInt)
Declare @beginDate Date, @endDate Date
Select @beginDate = '02/01/2015', @endDate = '12/31/2015'
While @beginDate <= @endDate
Begin
Insert Into @Calendar (CalendarDate, IsWeekend, YearNo, QuarterNo, MonthNo, DayOfYearNo, DayNo, WeekNo, WeekDayNo)
Select
@beginDate As CalendarDate
,(Case When DATEPART(Weekday, @beginDate) In (7, 1) Then 1 Else 0 End) As IsWeekend
,DATEPART(Year, @beginDate) As YearNo
,DATEPART(QUARTER, @beginDate) As QuarterNo
,DATEPART(MONTH, @beginDate) As MonthNo
,DATEPART(DayOfYear, @beginDate) As DayOfYearNo
,DATEPART(Day, @beginDate) As DayNo
,DATEPART(Week, @beginDate) As WeekNo
,DATEPART(WEEKDAY, @beginDate) As WeekDayNo
Set @beginDate = DateAdd(Day, 1, @beginDate)
End
;WITH CTE
AS
(
SELECT
CalendarDate
,WeekNo
,Row_Number() OVER(PARTITION BY WeekNo ORDER BY CalendarDate ASC) As FirstDayOfWeek
,Row_Number() OVER(PARTITION BY WeekNo ORDER BY CalendarDate DESC) As LastDayOfWeek
FROM
@Calendar
)
SELECT
U.UserID
,U.Name
,WeekNo
,MAX(CASE WHEN FirstDayOfWeek = 1 THEN CalendarDate ELSE NULL END) As FirstDayOfWeek
,MAX(CASE WHEN LastDayOfWeek = 1 THEN CalendarDate ELSE NULL END) As LastDayOfWeek
FROM
@Users U
CROSS JOIN CTE
GROUP BY
U.UserID
,U.Name
,WeekNo
also i am not sure how the performance would be as i using while loop. please show me your idea with sample query.
thanks