Sql server 从来不是“唯一选项”。)有几种很好的方法可以让你只在工作日工作,你可以从其中的一种开始。不过,度假的工作要多得多。如果你打算投资这项工作,把它保存到一张桌子上,你以后就不用再做了。但你肯定会有更多的人在短期内提出其他意见。这可能需要一些努力,但正如你所看到

Sql server 从来不是“唯一选项”。)有几种很好的方法可以让你只在工作日工作,你可以从其中的一种开始。不过,度假的工作要多得多。如果你打算投资这项工作,把它保存到一张桌子上,你以后就不用再做了。但你肯定会有更多的人在短期内提出其他意见。这可能需要一些努力,但正如你所看到,sql-server,tsql,datediff,Sql Server,Tsql,Datediff,从来不是“唯一选项”。)有几种很好的方法可以让你只在工作日工作,你可以从其中的一种开始。不过,度假的工作要多得多。如果你打算投资这项工作,把它保存到一张桌子上,你以后就不用再做了。但你肯定会有更多的人在短期内提出其他意见。这可能需要一些努力,但正如你所看到的,当你开始在你的查询中变得更具创造性时,不仅解决方案变得更难开发,而且将来也更难维护,而且越复杂,也可能影响性能。通过创建日历表,您已经预先配置了可能需要的任何计算,然后只需加入日期即可。这不仅更简单,而且可能会提高查询性能。我认为在Exce


从来不是“唯一选项”。)有几种很好的方法可以让你只在工作日工作,你可以从其中的一种开始。不过,度假的工作要多得多。如果你打算投资这项工作,把它保存到一张桌子上,你以后就不用再做了。但你肯定会有更多的人在短期内提出其他意见。这可能需要一些努力,但正如你所看到的,当你开始在你的查询中变得更具创造性时,不仅解决方案变得更难开发,而且将来也更难维护,而且越复杂,也可能影响性能。通过创建日历表,您已经预先配置了可能需要的任何计算,然后只需加入日期即可。这不仅更简单,而且可能会提高查询性能。我认为在Excel中创建高级日历并导入它可能是最简单的方法。实际上只需要几分钟。您好,谢谢您的帮助,它运行时没有任何缺陷,我只是在理解查询的底部部分时遇到了问题,其中dt.number_of_grm/numberofdays为[avg_daydiff]。例如,您的“where”语句是从datacompleted到datecompleted,但我的范围是xx到YY例如,查找列名“ApprovalRequiredFrom”=GRM的所有行,并且它必须在2月1日到2月28日之间(乞求到上个月底)对于满足这两个条件返回的每一行,识别XX列到YY列中的DATEDIFF,告诉我工作日(不包括周末),然后得到整个集合的平均值。我可能误解了这个问题。。。抱歉,我已经编辑了答案。答案是不包括周末的日期范围。如何计算xx和yy之间的日期?如果@temp中的
date
变量大于您的
xx
,小于您的
yy
,我可能会进行计数。非常感谢您的帮助,我想我会使用日历,因为最终我将不得不排除假期。我已经创建了一个日历,所以我将尝试使用它进行计算。您好,谢谢,它运行时没有任何缺陷,我只是无法理解查询的底部部分,其中dt.number_of_grm/numberofdays为[avg_daydiff]。例如,您的“where”语句是从datacompleted到datecompleted,但我的范围是xx到YY例如,查找列名“ApprovalRequiredFrom”=GRM的所有行,并且它必须在2月1日到2月28日之间(乞求到上个月底)对于满足这两个条件返回的每一行,识别XX列到YY列中的DATEDIFF,告诉我工作日(不包括周末),然后得到整个集合的平均值。我可能误解了这个问题。。。抱歉,我已经编辑了答案。答案是不包括周末的日期范围。如何计算xx和yy之间的日期?如果@temp中的
date
变量大于您的
xx
,小于您的
yy
,我可能会进行计数。非常感谢您的帮助,我想我会使用日历,因为最终我将不得不排除假期。我已经创建了一个日历,所以我将尝试使用它来计算它。
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))
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