Я новичок в SQL, извините за вопрос новичка.
Мне дали таблицу для анализа, и я хочу найти количество дней, прошедших между всеми датами запуска и датами крайнего срока, в новом столбце, который я создал под названием duration. Затем я хочу найти среднее значение за те дни. Какую команду я напишу для этого?
——————————————
Запущен | Срок | Продолжительность |
——————————————-
Ср. | Ср. | Средн.
Это то, что я хочу сделать / найти. Не знаю с чего начать / написать.
Пожалуйста, взгляните на ответ ниже - это работает для вас?
Я думаю, вам нужно предоставить образцы данных и желаемые результаты.
Между прочим, вам не следует хранить избыточные данные в таблице. То, что вы называете продолжительностью, кажется просто разницей между двумя датами. Вы всегда можете получить это из существующих столбцов.
Есть столбец даты запуска и столбец крайнего срока с сотнями дат. Проекты заканчиваются в срок, независимо от того, был он завершен или нет. Я создал новый столбец и хочу узнать, сколько дней прошло для каждой строки проекта. Это выполнимо?
Спецификация будет намного более четко проиллюстрирована с помощью Пример данных и пример ожидаемого результата.
Таким образом, каждый проект заканчивается на launched
, который никогда не превышает deadline
. Но «продолжительность» будет от некоторого Дата начала до даты запуска, а не разница между launched
и deadline
. И, как уже упоминалось, не храните значения, которые вы можете рассчитать на основе существующих значений. Избыточность легко может привести к несоответствиям.
Использовать dateiff
select datelaunched, deadline, datediff(day, datelaunched, deadline)
union all
select avg(datelaunched), avg(deadline), avg(datediff(day, datelaunched, deadline))
Я вроде как понимаю ответ. Но любопытно, что за ответ, который синтаксически неверен для MySQL, будет.
Мне любопытно взять «среднее» значение ДАТЫ ... преобразовать дату в числовое значение ГГГГММДД, взять среднее числовое значение и вернуть десятичное значение, которое потенциально не является допустимой датой? Почему? (А функция DATEDIFF принимает два аргумента, если мы собирались использовать TIMESTAMPDIFF?)
Я предполагаю, что вы хотите что-то вроде этого:
select avg(timestampdiff(day, datelaunched, deadlined)) as avg_dur_days
from t;
Итак, есть крайний срок и фактическая дата запуска, которая может быть до или после крайнего срока? Вы, однако, не хотите знать, как часто крайний срок соблюдался или не соблюдался, вы просто хотите знать среднее количество дней между ними? Итак, если два проекта (?) Завершены на неделю вперед, а один - на две недели позже, вы бы хотели показать цифру ноль?