MySql средняя разница в дате - PullRequest
1 голос
/ 17 апреля 2020

У меня есть проблема, и я не знаю, возможно ли ее решить. А именно, у меня есть база данных MySQL с двумя столбцами: id и date. Как я могу сформулировать запрос, который вычислит среднюю разницу всех дат? Например, от 1 до 2 - 14 дней, от 2 до 3 - 12 дней, поэтому в среднем будет 13 дней.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Среднее значение - это только наибольшее значение минус наименьшее, деленное на единицу, меньше количества значений. Итак:

select datediff(max(date), min(date)) / nullif(count(*) - 1, 0)
from t;

Это легко увидеть, если взглянуть на цифры:

 1
 5       . . . 4
 10      . . . 5
 19      . . . 9

Средняя разница составляет (4 + 5 + 9) / 3 = 6.

Не случайно и (19 - 1) / 3 = 6. Это математическая уверенность.

Вы можете легко увидеть это. Средняя разница:

( (5 - 1) + (10 - 5) + (19 - 10) ) / 3

Вы можете изменить это:

( -1 + (5 - 5) + (10 - 10) + 19 ) / 3

, что:

( 19 - 1 ) / 3
0 голосов
/ 17 апреля 2020

Надеюсь, что это поможет

SELECT  AVG(DATEDIFF(Date, NextDate)) 
    FROM    (   SELECT  
                        Date,
                        (   SELECT  MIN(Date) 
                            FROM    YourTable T2
                            WHERE   T2.Date > T1.Date
                        ) AS NextDate
                FROM    YourTable T1
            ) AS T

* использовать имя вашей таблицы для YourTable

, это работает, когда существуют непересекающиеся диапазоны дат между двумя датами в строках. Если есть также диапазоны 0, тогда используйте> = вместо>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...