SQL - 如何使用“datediff”从日期范围中排除周末

我在获得我想要的结果时遇到了一些麻烦,下面是我的逻辑陈述。

-- 逻辑:计算上个月(2 月)完成的每个 GRM 续订的 xx 到 yy 之间的天数,然后取平均值(不包括节假日和周末)。

我的查询如下,我一直在玩工作日的计数。它有效,但我无法按照我想要的方式应用它。

我正在寻找的结果是识别上个月到当月(本示例中为 2 月),并从 XX 到 YY 范围内使用 (datediff) 计算天数,但只计算工作日。

--query 1 计算平均周期时间(范围内的天数)

select  AVG(1.00 * DATEDIFF(DAY, xx, yy)) AS Avg_DayDiff

FROM Database1.dbo.table1

where month(datecompleted) = month(dateadd(month,-1,current_timestamp))
       and year(datecompleted) = year(dateadd(month,-1,current_timestamp))
       and ApprovalRequiredFrom = 'GRM'

join( 

--表查询返回上个月的天数,包括当天的名称。

select CALENDAR_DATE,
        DAY_NAME,
        YEAR(CALENDAR_DATE) AS cal_year,
        MONTH(CALENDAR_DATE) AS cal_month

from Database1.dbo.table2

where month(CALENDAR_DATE) = month(dateadd(month,-1,current_timestamp))
      and year(CALENDAR_DATE) = year(dateadd(month,-1,current_timestamp))

有小费吗?

谢谢!!

佐科洛特

一个可能的解决方案是使用 CTE 来填充一系列日期,然后选择DATEPART(dw, [thedate])不在 1 或 7 中的日期(分别为星期日和星期六)。

例如,如果您只想要一个没有周末的日期列表:

DECLARE @startdate date = --Startdate that you specify. In this case I'll select the first day of the previous month
                          (SELECT DATEADD(MONTH, -1, CAST(DATEADD(DAY, -DAY(GETDATE()) + 1, GETDATE()) as date)))
      , @enddate date   = --Enddate that you specify.  In this case I'll select the last day of the previous month
                          (SELECT DATEADD(DAY, -1, CAST(DATEADD(DAY, -DAY(GETDATE()) + 1, GETDATE()) as date)))
DECLARE @temp TABLE(thedate date)
;

WITH dates_CTE (thedate) as 
(
  SELECT @startdate
  UNION ALL
  SELECT DATEADD(day, 1, thedate)
    FROM dates_CTE
   WHERE thedate < @enddate

)     
INSERT INTO @temp
SELECT thedate 
FROM dates_CTE
WHERE DATEPART(dw, [thedate]) NOT IN (1,7) --not a weekend

--continue the main query here
SELECT * FROM @temp

在您对 GRM 的查询中,您可以子查询 @temp 中的行数,其中对于给定的 GRM,日期大于 'xx' 且小于 'yy' 的行数。

这里需要注意的是,这不考虑假期。每个组织的计算方式各不相同。在纯 SQL 中完成它并非不可能,但日历表是最简单的 IMO。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL中排除周末?

来自分类Dev

在Oracle SQL中排除/忽略周末

来自分类Dev

SQL查询从周期表中排除日期范围

来自分类Dev

如何在SQL Server查询中排除周末和节假日

来自分类Dev

Sql Server 2008 从 DateDiff 中排除公司假期

来自分类Dev

Teradata SQL中的MODE-从范围中排除一个值,并使用多个表

来自分类Dev

Teradata SQL中的MODE-从范围中排除一个值,并使用多个表

来自分类Dev

如何在SQL中排除特定记录?

来自分类Dev

如何从SQL计数中排除特定的行

来自分类Dev

在JavaScript日期计算中排除周末

来自分类Dev

使用日期范围查找日期范围的SQL

来自分类Dev

如何在Presto SQL中使用NOT LIKE和%从搜索中排除项目?

来自分类Dev

如何在T-Sql中排除时间?

来自分类Dev

如何在oracle sql group by中排除小时,分钟,秒

来自分类Dev

如何从类似于“ IF”条件的SQL查询中排除行

来自分类Dev

如何使用Oracle SQL选择不同的日期范围

来自分类Dev

SQL从WHERE中排除通配符

来自分类Dev

从SQL结果中排除项目

来自分类Dev

从序列中排除值的 SQL

来自分类Dev

如何将当前日期放入我的 SQL datediff

来自分类Dev

如何从SQL中的周数获取日期范围

来自分类Dev

SQL Server主键使用日期范围

来自分类Dev

使用DateSerial函数的SQL自动日期范围

来自分类Dev

使用日期范围SQL自动填充表

来自分类Dev

使用SQL检测连续的日期范围

来自分类Dev

如何使用SQL从有效的日期表中查找没有数据的日期范围?

来自分类Dev

如何使用numpy从范围(n)中排除`x`

来自分类Dev

SQL获取日期范围

来自分类Dev

SQL 日期范围