#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
Спасибо