2014-01-10 34 views
0

我需要计算日期差异的平均值,排除列中各行的周末数。查询给了我错误的结果。但是,当我自己计算它时,我会得到不同的结果。查询是一样的东西 -要计算在sql服务器列中日期差异的平均值

select zone, avg(datediff(dd,startdate,enddate)-datediff((ww,startdate,enddate)*2)) from table where startdate >'1/1/2013' group by zone

我没有得到正确的结果。请指导我。

+0

这将帮助你 - http://stackoverflow.com/questions/7497418/sql-query-to-find-average-of-difference-between-日期 – MusicLovingIndianGirl

+0

嗨,感谢您的回复,但是,我有2列。如此迷茫。请指导我 – user1416631

+0

如何http://www.sqlservercentral.com/Forums/Topic1262284-392-1.aspx – MusicLovingIndianGirl

回答

0

试试这个代码:

select zone , avg(NumOfDays) from 
      (select zone, (datediff(dd,startdate,enddate)-datediff((ww,startdate,enddate)*2)) as   NumOfDays from table where startdate >'1/1/2013') 
    group by zone 
+0

计算方法与OP相同,只是语法不同。变化会带来什么? –

+0

嘿,谢谢,还有很多很抱歉的迟到回复。我的工作很忙 – user1416631

0

我不知道你的数据的模样和你挑战究竟是什么,但我觉得你的问题是“排除周末”?也许这对你有帮助?

首先创建一个计算月经之间的每个周末一天后对其进行筛选的功能:

CREATE FUNCTION fnc_GetWeekendDays(@dFrom DATETIME, @dTo DATETIME) 
RETURNS INT AS 
BEGIN 
    Declare @weekendDays int 
    Set @weekendDays = 0 

    While @dFrom <= @dTo 
    Begin 
     If ((datepart(dw, @dFrom) = 1) OR (datepart(dw, @dFrom) = 7))  
        Set @weekendDays = @weekendDays + 1 
        Set @dFrom = DateAdd(d, 1, @dFrom) 

    End 
    Return (@weekendDays) 
END 

在此之后,写你的查询:

Select 
zone, 
avg(cast((datediff(SECOND,StartTime,EndTime) - dbo.fnc_GetWeekendDays(StartTime, EndTime)*86400) as float)) 
from 
    (
     Select zone, 
     CASE 
      WHEN (datepart(dw, startdate) = 1) THEN DATEADD(Day, DATEDIFF(Day, 0, startdate), 1) 
      WHEN (datepart(dw, startdate) = 7) THEN DATEADD(Day, DATEDIFF(Day, 0, startdate), 2) 
      ELSE startdate END as StartTime, 
     CASE 
      WHEN (datepart(dw, enddate) = 1) THEN DATEADD(Day, DATEDIFF(Day, 0, enddate), -2) 
      WHEN (datepart(dw, enddate) = 7) THEN DATEADD(Day, DATEDIFF(Day, 0, enddate), -1) 
      ELSE enddateEND as EndTime 
     from table 
    ) subquery 
where StartTime < EndTime and startdate >'2013-01-01 00:00:00.000' 
Group by zone 

你会得到你的平均时间(秒) ,如果你想另一种格式,你必须计算它...