之間的差異平均值我有了像SQL查詢來查找日期
Date
13/8/2011
2/9/2011
10/9/2011
20/9/2011
我需要寫一個SQL查詢/程序,這將幫助我得到的日期之間的差值的平均值數據的列。 對於上面的例子,它將是(19 + 8 + 10)/3=12.33 請幫助。
由於事先 格塔
之間的差異平均值我有了像SQL查詢來查找日期
Date
13/8/2011
2/9/2011
10/9/2011
20/9/2011
我需要寫一個SQL查詢/程序,這將幫助我得到的日期之間的差值的平均值數據的列。 對於上面的例子,它將是(19 + 8 + 10)/3=12.33 請幫助。
由於事先 格塔
我不知道你的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。
試試這個:
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
你的意思是'/(COUNT(date_col)-1)' –
@ypercube:是的,你說得對,我的錯:D謝謝 – Marco
這讓我花了很長時間才意識到爲什麼這樣工作。好的問題分析。 –
19 + 8 + 10從哪裏來? – bzlm
我假設日期之間的差異,即13/8/2011到2/9/2011是19天等,我假設日期排序,每個日期應與其鄰居進行比較。 – newenglander