我有一张名为Emp的桌子。其中有3列Name,LastWorkingDay,LeaveValue,DateofReturn。我想写一个查询:
我的表格应该返回' 2016-10-10'和' 2016-10-16'即整整一周。因此,只应删除前2个记录,并显示最后3个记录。
SELECT [Name]
,[Last_Working_Day]
,[Date_of_Return]
,[LeaveValue]
,NewWeekStatus
FROM [Emp]
INNER JOIN [Date]
ON [Emp].Last_Working_Day = [Date].FullDate
WHERE [Date].NewWeekStatus = 'Current Full Week'
我怎样才能做到这一点?
答案 0 :(得分:1)
您需要先找出当前的第一天和最后一天,如下所示。
Declare @StartWeek AS datetime, @EndWeek AS datetime
select @StartWeek= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
select @EndWeek = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 6)
然后您可以在查询中使用这两个日期。
SELECT [Name]
,[Last_Working_Day]
,[Date_of_Return]
,[LeaveValue]
,NewWeekStatus
FROM [Emp]
INNER JOIN [Date]
ON [Emp].Last_Working_Day = [Date].FullDate
WHERE [Date].NewWeekStatus = 'Current Full Week'
AND [Emp].Last_Working_Day BETWEEN @StartWeek AND @EndWeek
AND [Emp].Date_of_Return BETWEEN @StartWeek AND @EndWeek
然而,你的欲望输出需要考虑上周而非本周。
答案 1 :(得分:0)
看看这个:
SELECT [Name]
,[Last_Working_Day]
,[Date_of_Return]
,[LeaveValue]
,NewWeekStatus
FROM [Emp]
INNER JOIN [Date]
ON [Emp].Last_Working_Day = [Date].FullDate
WHERE [Date].NewWeekStatus = 'Current Full Week' and (Date_of_return>='2016-10-10' and Date_of_return<='2016-10-16')