SQL-запрос, чтобы найти среднее различие между датами - PullRequest
1 голос
/ 21 сентября 2011

У меня есть столбец с такими данными, как

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

Мне нужно написать запрос / процедуру SQL, которая поможет мне получить среднее значение разностей между датами.Для приведенного выше примера это будет (19 + 8 + 10) /3=12.33 Пожалуйста, помогите с этим.

Заранее спасибо, Гита

Ответы [ 2 ]

7 голосов
/ 21 сентября 2011

Попробуйте это:

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
4 голосов
/ 21 сентября 2011

Я не знаю вашу СУБД, но это из SQL Server.Кроме того, один из ваших вызовов неверен - 09.02.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.

...