从任何当前工作日提取上周 M-F 范围

Pulling last week M-F range from any current week day

SELECT d.i_EmpID as 'EmpID',m.c_EmployeeFirstName as 'First Name', 
m.c_employeeLastName as 'Last Name', d.c_date as 'Date', d.c_A as 'A', d.c_M 
as 'M', d.c_P as 'P', d.c_lp as 'Lp'
,'School' as Company
FROM [table1].[dbo].[tbl_daily] d
inner join [table2].[dbo].[tbl_emp] m
on d.[i_EmpID] = m.[i_EmpID]
where left(c_date, 2)=datepart(month, getdate()-1) and 
right(c_date,4)=datepart(year,getdate()-1) and substring(c_date, 
4,2)=datepart(day,getdate()-3) 

您好,

我正在尝试将上周的日期范围拉到当前日期之外。现在我有 5 个单独的查询联合起来,代码的结尾 (day,getdate()-3) 是一周中的其他 5 天(我正在寻找周一到周五)。这基本上是我的查询,没有其他 4 个工会能够在周一到周五拉动,我已经不是最好的方法,事实上它今天甚至不起作用。

我能够在 MySQL 完成这项工作,因为它有一个内置的周功能,我可以在上周拉取,但是我不知道如何在 [=28] 中拉取上周=] 因为语言不同。我的问题是我的代码昨天工作,但是由于它在周二到周五减去天数,所以它不会 work/it 不工作。我绝不是在 SQL 中使用日期的专家,我很茫然。

我知道必须有更好的方法,我花了大约 4 个小时阅读各种指南和示例,但我似乎找不到具体说明我正在寻找的示例。

总而言之,我在上周(例如:9/24 到 9/28)试图拉动我 运行 本周的任何一天。因此,即使我 运行 我在星期五(10/5)的报告,我也能看到 9/24 到 9/28,同样下周也能看到其中的 10/1 到 10/5星期。这些是我拉的表和列。另外,如果重要的话,这不是学校项目,而是我负责的与工作相关的项目。

任何指导将不胜感激。提前谢谢你。

编辑:示例数据:

EID     First   Last    Date          A  M  P   LP        Company
5303    Kent    Grit    09/25/2018    9  44 54   3        Company 1
6890    Lola    Grif    09/28/2018    5  4  3             Company 1
6272    Paul    Hammer  09/26/2018    1  2  4    4        Company 1
6273    Joe     Hammer  09/24/2018    11 8  7             Company 1

这可以通过 dateadddatepart 函数以及一些算术来完成。

with dates(dt) as (select '2018-10-02' union all
                   select '2018-10-01' union all
                   select '2018-10-03' union all
                   select '2018-10-04' union all
                   select '2018-10-05' union all
                   select '2018-10-06' union all
                   select '2018-10-11' 
                  ) 
--Actual query to be executed by replacing the table name
select dt,
dateadd(day,-datepart(dw,cast(dt as date))-5,cast(dt as date)) as strt,
dateadd(day,-datepart(dw,cast(dt as date))-1,cast(dt as date)) as ed
from dates --replace this with the table being used

这是您要找的吗?

...
WHERE
  CAST(c_date AS DATE) >= DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE())-1, 0)
  AND
  CAST(c_date AS DATE) < DATEADD(DAY, +5, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE())-1, 0))

它将从周日到周六在上周一午夜和上周六午夜提取(这样您就可以在结果集中获取周五的最后一秒)。

编辑:为每个评论添加了 CAST