从任何当前工作日开始,将上周的M-F范围拉大

时间:2018-10-02 20:50:52

标签: sql sql-server sql-server-2014

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天(我正在寻找星期一至星期五)。从本质上讲,这是我的查询,没有其他四个工会能够将星期一拉到星期五,而且我已经不是这样做的最佳方法,事实上,今天它甚至不起作用。

我能够在MySQL中完成此操作,因为它具有内置的week函数,我可以在上周执行,但是由于语言不同,我不知道如何在SQL中执行操作。我的问题是我的代码昨天工作了,但是由于它减去了星期二至星期五的天数,所以它不起作用/不起作用。我绝不是在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

2 个答案:

答案 0 :(得分:2)

这是您要找的吗?

...
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

答案 1 :(得分:1)

这可以通过function deleteEntries() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var datarange = ss.getDataRange(); var lastrow = datarange.getLastRow(); var values = datarange.getValues(); var currentDate = new Date(); for (i = lastrow; i >= 5; i--) { var tempdate = values[i-1][5]; if (tempdate < currentDate) { ss.getRange(i-1, 8).deleteCells(SpreadsheetApp.Dimension.ROWS); ss.getRange(i-1, 9).deleteCells(SpreadsheetApp.Dimension.ROWS); ss.getRange(i-1, 10).deleteCells(SpreadsheetApp.Dimension.ROWS); }}} dateadd函数进行一些算术实现。

datepart