LEFT JOIN , WHERE, , , DATEPART 'WEEK' . "ISOWEEK" SQL2008.
DECLARE @TodayDayOfWeek INT
DECLARE @EndOfPrevWeek DateTime
DECLARE @StartOfPrevWeek DateTime
SET @TodayDayOfWeek = datepart(dw, GetDate())
SET @EndOfPrevWeek = DATEADD(dd, -@TodayDayOfWeek, GetDate())
SET @StartOfPrevWeek = DATEADD(dd, -(@TodayDayOfWeek+6), GetDate())
, LEFT JOIN, where. .
- , , . , , DATEPART(WK...) .
One more note: you subtract 1 week, which will give you different results when you spend on Monday versus Tuesday. When you say "last week", then you mean literally "Today" - 7, or do you mean last week, as in Sun-Sat?
Try this query to see if it fixes your problem.
DECLARE @Today DATETIME,
@TodayDayOfWeek INT,
@EndOfPrevWeek DATETIME,
@StartOfPrevWeek DATETIME,
@MonthPart1 INT,
@MonthPart2 INT,
@YearPart1 INT,
@YearPart2 INT
SET @Today = GETDATE()
SET @TodayDayOfWeek = datepart(dw, @Today)
SET @EndOfPrevWeek = DATEADD(dd, -@TodayDayOfWeek, @Today)
SET @StartOfPrevWeek = DATEADD(dd, -(@TodayDayOfWeek+6), @Today)
SET @MonthPart1 = DATEPART(MM, @StartOfPrevWeek)
SET @MonthPart2 = DATEPART(MM, @EndOfPrevWeek)
SET @YearPart1 = DATEPART(YYYY, @StartOfPrevWeek)
SET @YearPart2 = DATEPART(YYYY, @EndOfPrevWeek)
SELECT
dbo.Project.PROJECT_ID,
dbo.ProjectForeCast.HOURS AS F0
FROM
dbo.Project
LEFT JOIN dbo.ProjectForeCast ON dbo.Project.PROJECT_ID = dbo.ProjectForeCast.PROJECT_ID
WHERE dbo.ProjectForeCast.YEAR_NUMBER IN (@YearPart1, @YearPart2)
AND dbo.ProjectForeCast.MONTH_NUMBER IN (@MonthPart1, @MonthPart2)
AND dbo.Project.START_DATE BETWEEN @StartOfPrevWeek AND @EndOfPrevWeek