T-SQL - рассчитать среднее значение для каждого 4 месяца последовательно - PullRequest
0 голосов
/ 08 июня 2019

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

Column1 Date         Data  Column2   Avg
Test1   01/01/2019     1     2
Test1   01/20/2019     2     3
Test1   01/23/2019     3     4
Test1   02/20/2019     4     3
Test1   03/20/2019     5     1
Test1   04/20/2019     6     2
Test1   05/20/2019     7     0
Test1   06/20/2019     8     1
Test1   07/20/2019     9     1
Test1   08/20/2019     10    2
Test1   09/20/2019     11    3
Test1   10/20/2019     12    4
Test1   01/01/2020     13    6
Test1   02/01/2020     14    8
Test1   03/01/2020     15    9
Test1   04/01/2020     16    1

Мне нужен столбец в операторе select для таблицы Temp, в котором создается дополнительный столбец с именем Avg, который будет последовательно брать значения из Column2 и делить их на (среднее значение данных за каждые 4 месяца, разделенное на 30). Так, например,

  • первое среднее значение будет 2 (из столбца 2) / (среднее (1,2,3,4,5,6) (из Столбец данных) / 30)
  • второе значение Avg будет 3 / (Avg (4,5,6,7) / 30)
  • Третье среднее значение будет 4 / (Avg (5,6,7,8) / 30)

и т. Д.

1 Ответ

1 голос
/ 08 июня 2019

попробуйте Скрипка :

select f1.*, 
case when f3.Average30=0 then null else f1.Column2 / f3.Average30 end as Avg
from mytable f1
outer apply
(
  select avg(cast(f2.Data as decimal))/30.0 as Average30
  from mytable f2
  where f2.MyDate between f1.Mydate and EOMONTH(DATEADD(MONTH, 3, f1.MyDate))

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