2011-09-21 155 views
1

之間的差異平均值我有了像SQL查詢來查找日期

Date 
13/8/2011 
2/9/2011 
10/9/2011 
20/9/2011 

我需要寫一個SQL查詢/程序,這將幫助我得到的日期之間的差值的平均值數據的列。 對於上面的例子,它將是(19 + 8 + 10)/3=12.33 請幫助。

由於事先 格塔

+0

19 + 8 + 10從哪裏來? – bzlm

+0

我假設日期之間的差異,即13/8/2011到2/9/2011是19天等,我假設日期排序,每個日期應與其鄰居進行比較。 – newenglander

回答

4

我不知道你的RDBMS,但是這是從SQL Server。此外,您的Calcs(計算)中的一個是錯誤的 - 02/09/2011 - 13/08/2011爲20,不產生19.

create table dates (
    myDate date 
) 

insert into dates 
values ({d '2011-08-13'}), 
    ({d '2011-09-02'}), 
    ({d '2011-09-10'}), 
    ({d '2011-09-20'}) 

;with orderedDates as (
    select ROW_NUMBER() OVER (order by myDate) as row, myDate 
    from dates 
), datediffs as (
    select DATEDIFF(dd, o2.myDate, o1.myDate) as diff 
    from orderedDates o1 left outer join 
     orderedDates o2 on o1.row = o2.row + 1 
) 
select AVG(cast(diff as decimal)) 
from datediffs 
where diff is NOT NULL 

結果是12.667:(20 + 8 + 10)/ 3。

7

試試這個:

SELECT DATEDIFF(
    day, 
    MIN(date_col), 
    MAX(date_col))/(COUNT(date_col)-1) AS mean_val 
FROM your_table 

感謝ypercube對他的建議:

SELECT 
    CASE 
    WHEN COUNT(date_col) < 2 THEN 0 
    ELSE DATEDIFF(
     day, 
     MIN(date_col), 
     MAX(date_col))/(COUNT(date_col)-1) 
    END 
    as mean_val 
FROM your_table 
+0

你的意思是'/(COUNT(date_col)-1)' –

+0

@ypercube:是的,你說得對,我的錯:D謝謝 – Marco

+0

這讓我花了很長時間才意識到爲什麼這樣工作。好的問題分析。 –