【问题标题】:Grabbing Data from Past 3 Business Days获取过去 3 个工作日的数据
【发布时间】:2018-07-27 11:14:14
【问题描述】:

我希望获取过去 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

非常感谢任何帮助!

【问题讨论】:

  • 我正在使用 Microsoft SQL Server Management Studio 2017

标签: sql sql-server date tsql


【解决方案1】:

您可以使用 WEEKDAY() 函数将工作日分配给每个日期。然后你必须比较你当前的工作日 WEEKDAY(CURDATE()) 是否在 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);

【讨论】:

  • 你绝对是个天才。这完美!谢谢!
  • 谢谢。很高兴我能帮上忙。
  • 这不会考虑任何假期,只是一个注释。为此,您可能需要实现日历表...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多