Pedro Osvaldo Ответов: 2

Как вычесть значение из того же столбца, той же таблицы?


У меня есть такой запрос
SELECT  I.ELEMENTO , I.VALOR
FROM Operacion.Informe AS I 						  
WHERE I.Proceso = 'IM'
AND I.NODO = 05	
AND I.VERSION = 0				
AND I.ANO =2019 AND I.MES=09
AND I.ITEM=2			
AND CONCEPTO='COSTOREAL'		
ORDER BY YEAR(I.ELEMENTO), MONTH(I.ELEMENTO)


ELEMENTO                                           VALOR
-------------------------------------------------- ----------------------
September 2018                                     5466.849222
October 2018                                       5231.50114
November 2018                                      5572.84702
December 2018                                      4784.915827
January 2019                                       4191.786705
February 2019                                      4369.142868
March 2019                                         5409.108792
April 2019                                         4837.711994
May 2019                                           5057.115781
June 2019                                          4890.99468
July 2019                                          4515.614788
August 2019                                        4587.52694
September 2019                                     4480.472734


Что я уже пробовал:

I need to subtract the first record from the last record of the query
For example the value of September 2018 subtract the value of September 2019

Tomas Takac

ELEMENTO - это дата и время? Также, пожалуйста, обновите свой вопрос с ожидаемым результатом.

2 Ответов

Рейтинг:
1

MadMyche

Один из вариантов сравнения значений таблицы с другими версиями самой таблицы заключается в следующем ПРИСОЕДИНИТЬСЯприведите таблицу к себе, как показано ниже.
Используя левое соединение метод дает возможность рассмотреть с самых ранних записей, и с помощью оператора функции isnull будет компенсировать те записи, которые не существуют.

SELECT  i.ELEMENTO, i.VALOR
,       ValorPrior = IsNull(j.Valor, 0)           -- Prior years value
,       ValorChange= i.Valor - IsNull(j.Valor, 0) -- Difference between the 2
FROM       Operacion.Informe AS i
LEFT JOIN  Operacion.Informe AS j ON Year(i.ELEMENTO) = 1 + Year(j.ELEMENTO)
Предложения WHERE были удалены, чтобы вы могли просмотреть, как это работает, а затем добавить их обратно по мере необходимости


Рейтинг:
0

Maciej Los

Все, что вам нужно сделать, это получить МАКСИМУМ[^] и МИНУТА[^] значение ELEMENTO чем получить соответствующие данные для VALOR поле и вычтите их.