Sql 获取过去3个工作日的数据
我希望获得过去3个工作日内发生的任何数据。 如果今天是星期一,我想查询上星期三、星期四和星期五发生的数据。 如果是周二,则调出周四、周五和周一的数据。 如果是星期三,就把车开到星期五、星期一、星期二。等等 这是我到目前为止在WHERE声明中所说的,但我知道这是不正确的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(
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您真是个天才。这很好用!非常感谢。非常感谢。很高兴我能帮忙。这不考虑任何假期,只是一张便条。为此,您可能需要实现日历表。。。