Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取过去3个工作日的数据_Sql_Sql Server_Date_Tsql - Fatal编程技术网

Sql 获取过去3个工作日的数据

Sql 获取过去3个工作日的数据,sql,sql-server,date,tsql,Sql,Sql Server,Date,Tsql,我希望获得过去3个工作日内发生的任何数据。 如果今天是星期一,我想查询上星期三、星期四和星期五发生的数据。 如果是周二,则调出周四、周五和周一的数据。 如果是星期三,就把车开到星期五、星期一、星期二。等等 这是我到目前为止在WHERE声明中所说的,但我知道这是不正确的 AND CASE WHEN DATENAME(DW, GETDATE()) = 'Monday' THEN CAST(PE.SchedDt AS DATE) BETWEEN DATEADD(DAY,-5,CAST(GETDATE(

我希望获得过去3个工作日内发生的任何数据。 如果今天是星期一,我想查询上星期三、星期四和星期五发生的数据。 如果是周二,则调出周四、周五和周一的数据。 如果是星期三,就把车开到星期五、星期一、星期二。等等

这是我到目前为止在WHERE声明中所说的,但我知道这是不正确的

AND CASE
WHEN DATENAME(DW, GETDATE()) = 'Monday' THEN CAST(PE.SchedDt AS DATE) BETWEEN DATEADD(DAY,-5,CAST(GETDATE()AS DATE)) AND DATEADD(DAY,-3,CAST(GETDATE()AS DATE))
WHEN DATENAME(DW, GETDATE()) = 'Tuesday' THEN CAST(PE.SchedDt AS DATE) BETWEEN DATEADD(DAY,-5,CAST(GETDATE()AS DATE)) AND DATEADD(DAY,-1,CAST(GETDATE()AS DATE))
WHEN DATENAME(DW, GETDATE()) = 'Wednesday' THEN CAST(PE.SchedDt AS DATE) BETWEEN DATEADD(DAY,-5,CAST(GETDATE()AS DATE)) AND DATEADD(DAY,-2,CAST(GETDATE()AS DATE))
ELSE CAST(PE.SchedDt AS DATE) BETWEEN DATEADD(DAY,-3,CAST(GETDATE()AS DATE)) AND DATEADD(DAY,-1,CAST(GETDATE()AS DATE))
END

非常感谢您的帮助

您可以使用“工作日”功能将工作日分配给每个日期。然后,您必须比较当前的工作日WEEKDAYCURDATE是否在3的范围内

        CREATE TABLE data_table (date_column DATE, some_data VARCHAR(1));

        INSERT INTO data_table 
        VALUES ('2018-02-12', 'b'),('2018-02-14', 'a'),('2018-02-13', 'c'),
    ('2018-02-15', 'b'),('2018-02-16', 'a'),('2018-02-15', 'd'),
    ('2018-02-11', 'a'),('2018-02-10', 'e');

        SELECT * 
        FROM (
        SELECT a.*,WEEKDAY(date_column) weekday, WEEKDAY(CURDATE()) current_day 
        FROM data_table a
        ) b 
        WHERE 
        (b.weekday in (2,3,4) and current_day = 0)
        or (b.weekday in (3,4,0) and current_day = 1)
        or (b.weekday in (4,0,1) and current_day = 2)
        or (b.weekday < current_day && b.weekday >= current_day - 3);

我使用的是Microsoft SQL Server Management Studio 2017您真是个天才。这很好用!非常感谢。非常感谢。很高兴我能帮忙。这不考虑任何假期,只是一张便条。为此,您可能需要实现日历表。。。