У меня есть таблица, которая выглядит так (как пример):
+------------+----------+---------+---------+------+
| Date | NAV | YrMn | YrQt | Yr |
+------------+----------+---------+---------+------+
| 2/2/2015 | 20201975 | 2015-02 | 2015-Q1 | 2015 |
| 2/5/2015 | 20238246 | 2015-02 | 2015-Q1 | 2015 |
| 2/6/2015 | 20220397 | 2015-02 | 2015-Q1 | 2015 |
| 3/2/2015 | 25597902 | 2015-03 | 2015-Q1 | 2015 |
| 3/3/2015 | 25218728 | 2015-03 | 2015-Q1 | 2015 |
| 3/5/2015 | 25332618 | 2015-03 | 2015-Q1 | 2015 |
| 4/7/2015 | 25418590 | 2015-04 | 2015-Q2 | 2015 |
| 4/8/2015 | 25641822 | 2015-04 | 2015-Q2 | 2015 |
| 4/9/2015 | 25554811 | 2015-04 | 2015-Q2 | 2015 |
| 5/7/2015 | 30366075 | 2015-05 | 2015-Q2 | 2015 |
| 5/11/2015 | 30682382 | 2015-05 | 2015-Q2 | 2015 |
| 5/12/2015 | 30302426 | 2015-05 | 2015-Q2 | 2015 |
| 8/23/2016 | 33089750 | 2016-08 | 2016-Q3 | 2016 |
| 8/24/2016 | 32927879 | 2016-08 | 2016-Q3 | 2016 |
| 8/29/2016 | 32788338 | 2016-08 | 2016-Q3 | 2016 |
| 9/23/2016 | 32027027 | 2016-09 | 2016-Q3 | 2016 |
| 9/26/2016 | 31610061 | 2016-09 | 2016-Q3 | 2016 |
| 9/27/2016 | 31730128 | 2016-09 | 2016-Q3 | 2016 |
| 10/26/2016 | 31585115 | 2016-10 | 2016-Q4 | 2016 |
| 10/27/2016 | 31222400 | 2016-10 | 2016-Q4 | 2016 |
| 10/28/2016 | 31148585 | 2016-10 | 2016-Q4 | 2016 |
| 11/1/2016 | 31216799 | 2016-11 | 2016-Q4 | 2016 |
| 11/2/2016 | 31112343 | 2016-11 | 2016-Q4 | 2016 |
| 11/3/2016 | 30572465 | 2016-11 | 2016-Q4 | 2016 |
+------------+----------+---------+---------+------+
Для простоты я удалил много данных, но для каждого рабочего дня для данных за этот день добавляется строка. Я хочу добавить в эту таблицу два столбца, чтобы у нас был текущий подсчет среднегодового и квартального NAV. Среднее значение представляет собой СЧА с первого числа каждого месяца в том виде, в каком оно указано в таблице. Например, средняя СЧА за 1 кв. 2015 г. будет средней СЧА за 02.02.2015 и 03.02.2015 (вместо среднего значения СЧА каждого дня за эти месяцы), а средняя СЧА за 2015 г. будет средней СЧА за 02.02.2015, 02.03.2015, 07.04.2015 и 07.05.2015. Я хочу, чтобы конечный результат выглядел так:
+------------+----------+---------+---------+------+-------------+-------------+
| Date | NAV | YrMn | YrQt | Yr | QtAvgBegNAV | YrAvgBegNAV |
+------------+----------+---------+---------+------+-------------+-------------+
| 2/2/2015 | 20201975 | 2015-02 | 2015-Q1 | 2015 | 22899939 | 25396136 |
| 2/5/2015 | 20238246 | 2015-02 | 2015-Q1 | 2015 | 22899939 | 25396136 |
| 2/6/2015 | 20220397 | 2015-02 | 2015-Q1 | 2015 | 22899939 | 25396136 |
| 3/2/2015 | 25597902 | 2015-03 | 2015-Q1 | 2015 | 22899939 | 25396136 |
| 3/3/2015 | 25218728 | 2015-03 | 2015-Q1 | 2015 | 22899939 | 25396136 |
| 3/5/2015 | 25332618 | 2015-03 | 2015-Q1 | 2015 | 22899939 | 25396136 |
| 4/7/2015 | 25418590 | 2015-04 | 2015-Q2 | 2015 | 27892333 | 25396136 |
| 4/8/2015 | 25641822 | 2015-04 | 2015-Q2 | 2015 | 27892333 | 25396136 |
| 4/9/2015 | 25554811 | 2015-04 | 2015-Q2 | 2015 | 27892333 | 25396136 |
| 5/7/2015 | 30366075 | 2015-05 | 2015-Q2 | 2015 | 27892333 | 25396136 |
| 5/11/2015 | 30682382 | 2015-05 | 2015-Q2 | 2015 | 27892333 | 25396136 |
| 5/12/2015 | 30302426 | 2015-05 | 2015-Q2 | 2015 | 27892333 | 25396136 |
| 8/23/2016 | 33089750 | 2016-08 | 2016-Q3 | 2016 | 32558389 | 31979673 |
| 8/24/2016 | 32927879 | 2016-08 | 2016-Q3 | 2016 | 32558389 | 31979673 |
| 8/29/2016 | 32788338 | 2016-08 | 2016-Q3 | 2016 | 32558389 | 31979673 |
| 9/23/2016 | 32027027 | 2016-09 | 2016-Q3 | 2016 | 32558389 | 31979673 |
| 9/26/2016 | 31610061 | 2016-09 | 2016-Q3 | 2016 | 32558389 | 31979673 |
| 9/27/2016 | 31730128 | 2016-09 | 2016-Q3 | 2016 | 32558389 | 31979673 |
| 10/26/2016 | 31585115 | 2016-10 | 2016-Q4 | 2016 | 31400957 | 31979673 |
| 10/27/2016 | 31222400 | 2016-10 | 2016-Q4 | 2016 | 31400957 | 31979673 |
| 10/28/2016 | 31148585 | 2016-10 | 2016-Q4 | 2016 | 31400957 | 31979673 |
| 11/1/2016 | 31216799 | 2016-11 | 2016-Q4 | 2016 | 31400957 | 31979673 |
| 11/2/2016 | 31112343 | 2016-11 | 2016-Q4 | 2016 | 31400957 | 31979673 |
| 11/3/2016 | 30572465 | 2016-11 | 2016-Q4 | 2016 | 31400957 | 31979673 |
+------------+----------+---------+---------+------+-------------+-------------+
Есть ли способ сделать это? Я могу получить правильные числа, но я понятия не имею, как получить их на столе. Например, это дает мне среднегодовое значение:
WITH A AS
(
SELECT
s.Date, s.NAV,s.YrMn, s.YrQt, s.Yr,
ROW_NUMBER() OVER (PARTITION BY YrMn ORDER BY Date) AS Row
FROM
Portfolio.DailyNAV s
)
SELECT
Yr,
CASE
WHEN Yr = 2015 AND A.Row = 1 THEN AVG(NAV)
WHEN Yr = 2016 AND A.Row = 1 THEN AVG(NAV)
WHEN Yr = 2017 AND A.Row = 1 THEN AVG(NAV)
WHEN Yr = 2018 AND A.Row = 1 THEN AVG(NAV)
ELSE AVG (NAV)
END AS [YrAvgBegNAV]
FROM A
WHERE ROW = 1
GROUP BY Yr, Row
Однако это неэффективно, так как мне приходится обновлять код каждый год (или каждый квартал в случае квартальных данных). Кроме того, мне понадобится несколько объединений и просмотров всех этих данных, поэтому я думаю, что имеет смысл иметь все это на столе. Если возможно, я хотел бы изменить свою исходную таблицу, добавив столбцы квартальных и годовых средних данных (как вычисляемые столбцы).