I have a table that is of the form:
StartDate[date], EndDate[date], HoursPerWeek[int]
and is filled a bit like this:
StartDate | EndDate | HoursPerWeek
01/01/2010 | 31/12/2010 | 37
01/01/2010 | 31/03/2010 | 16
05/03/2010 | 31/10/2010 | 9
What I need to produce is a table that gives a breakdown on a week by week basis of the number of hours worked for a given date range.
Ideally I'd do this in linq to sql, but if I need to call a stored procedure that's fine. I haven't really got the first clue how to go about implementing this.
How can I get started with this?
UPDATE
I've ended up writing this as a store procedure, which works, but to my eyes is not a pretty solution.
CREATE PROCEDURE prcGetHoursWorked
(
@StartDate DATE,
@EndDate DATE
)
AS
CREATE TABLE #Results
(
WeekStart DATE,
TotalHours INT
)
DECLARE @WeekOffset INT
DECLARE @FirstDayOfStartWeek DATE
DECLARE @HoursThisWeek INT
SET @WeekOffset = 0
SET @FirstDayOfStartWeek = dbo.fnc_StartOfWeek(@StartDate, 2);
WHILE (DATEDIFF(wk, @StartDate, @EndDate) > @WeekOffset)
BEGIN
SELECT @HoursThisWeek = SUM(HoursPerWeek) FROM StaffCost
WHERE NOT (
Start> DATEADD(wk, @WeekOffset + 1, @FirstDayOfStartWeek)
OR
[End] < DATEADD(wk, @WeekOffset, @FirstDayOfStartWeek)
)
INSERT INTO #Results
VALUES(DATEADD(wk, @WeekOffset, @FirstDayOfStartWeek), @HoursThisWeek)
SET @WeekOffset = @WeekOffset + 1
END
SELECT * FROM #Results
Is it possible to do this as a set based operation, or better still straight from linq to sql?