如何建立一个查询,该查询返回SQL中上一个工作日的数据?

时间:2019-06-19 19:02:21

标签: sql

我正尝试在SQL中建立查询,以返回上一个工作日所需的数据。该代码每周(星期一至星期五)运行五天。

如果代码在星期一运行,我将编写哪些代码返回星期五数据?

注意:我是新来的,所以请告诉我确切的位置在哪里放置什么代码,谢谢

当前,我的代码运行正常,因此在星期二,我将获取星期一的数据;星期五,我得到星期四的数据,等等。但是,星期一,我的代码返回星期天的数据(为空)。

SELECT Distinct
[Entry Date]

FROM 
myTable


WHERE 

[entry date] >= dateadd(day,datediff(day,1,GETDATE()),0) AND
[entry date] < dateadd(day,datediff(day,0,GETDATE()),0)

2 个答案:

答案 0 :(得分:0)

如果使用的是SQL Server,则可以通过使用如下的if-else结构来解决问题:

IF(DATEPART(dw,GETDATE())=1)
BEGIN
    SELECT *
    FROM  myTable
    WHERE [entry date] >= dateadd(day,-3,GETDATE())
END
ELSE
BEGIN

    SELECT *
    FROM  myTable
    WHERE [entry date] >= dateadd(day,-1,GETDATE())
END

答案 1 :(得分:0)

您可以将其编写为单个查询:

SELECT Distinct t.[Entry Date]
FROM myTable t CROSS JOIN
     (VALUES (CASE WHEN FORMAT(GETDATE(), 'ddd', 'en-us') = 'Mon' THEN -3
                   ELSE -1
              END)
     ) v(offset)
WHERE [entry date] >= DATEADD(DAY, offset, CONVERT(DATE, GETDATE())) AND
      [entry date] < DATEADD(DAY, offset + 1, CONVERT(DATE, GETDATE()));

在文化说明符中使用FORMAT()可以使代码与任何国际化设置一起使用。没有几周开始的基本假设。

GETDATE()上的转换是可转换的(“索引安全”),因此代码也可以利用可用索引。