Средний рост с использованием SQL-запроса

#sql

#sql

Вопрос:

У меня есть следующая таблица:

таблица

Пожалуйста, помогите мне использовать следующий запрос в SQL: «среднее значение (value2 / value1, value3 / value2, value4 / value3)»

Большое спасибо!

Комментарии:

1. Какую СУБД вы используете??

Ответ №1:

Для SQL Server 2008 или более поздней версии;

 ; WITH CTE AS
(
SELECT *, LAG(VALUE) OVER(ORDER BY MONTH) AS XX FROM YOURTABLE
) 
SELECT AVG(CAST(VALUE AS FLOAT) / CAST(XX AS FLOAT)) FROM CTE WHERE XX IS NOT NULL
  

Комментарии:

1. Даже более старые версии SQL SERVER не поддерживаются LAG .

2. @prdp . , , В OP не указывается, какая база данных используется, и LAG() это стандартная функциональность ANSI.

3. вы можете сказать мне по-другому? Большое спасибо

4. Что вы подразумеваете под другим способом??

Ответ №2:

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

 SELECT AVG(Calc)
FROM
(
  SELECT t2.Value/t1.Value AS Calc
  FROM [Table] t1
  JOIN [Table] t2
  ON t1.[Month] = t2.[Month]   1
) calc
  

Комментарии:

1. я запускаю сообщение об ошибке SQL Msg 208, уровень 16, состояние 1, строка 1 Недопустимое имя объекта ‘VILIVE’. (VILIVE — это mytable)

2. Извините, я не понимаю.

3. У меня другая проблема, пожалуйста, направьте меня, если я хочу добавить «где месяц = 3».

Ответ №3:

Попробуйте выполнить запрос ниже.

             select avg(CAST(a.value as FLOAT)/cast(a.mm as FLOAT)) from
            (
            SELECT *, LAG(value) OVER(ORDER BY MONTH) AS mm FROM #your_table
            ) 
            a where a.mm is not null
  

Пожалуйста, дайте нам знать, если у вас есть проблемы

Комментарии:

1. Я использую ms sql 2008, Lag не распознается как имя встроенной функции. Ошибка.

Ответ №4:

Я хочу использовать SQL-запрос для:

Если я выберу месяц = 3 => результат = среднее значение (значение2 / значение1, значение3 / значение2) -1

Если я выберу месяц = 4, результат = среднее значение (значение 2 / значение1, значение3 / значение2, значение4 / значение3) -1

Спасибо