Фон
Я работаю с ежемесячными отпускными часами на уровне сотрудников (FYTD), которые берут на себя 20 тыс. Сотрудников, начиная с 6 лет. В таблице не менее 20 миллионов записей.
Примечание Наш финансовый год начинается 1 сентября.
Пример таблицы
| Month | Country | Employee | Vacation_Hours_YTD |
|--------|---------|----------|--------------------|
| 201707 | USA | A | 92 |
| 201708 | USA | A | 100 |
| 201709 | USA | A | 6 |
| 201710 | USA | A | 15 |
| 201707 | USA | B | 60 |
| 201708 | USA | B | 60 |
| 201709 | USA | B | 10 |
| 201710 | USA | B | 12 |
| 201707 | CA | X | 82 |
| 201708 | CA | X | 94 |
| 201709 | CA | X | 7 |
| 201710 | CA | X | 20 |
| 201707 | CA | Y | 45 |
| 201708 | CA | Y | 80 |
| 201709 | CA | Y | 0 |
| 201710 | CA | Y | 12 |
Желаемый выход
| Month | Country | Total_Vacation_Hours |
|--------|---------|----------------------|
| 201708 | USA | 8 |
| 201709 | USA | 16 |
| 201710 | USA | 11 |
| 201708 | CA | 43 |
| 201709 | CA | 7 |
| 201710 | CA | 25 |
Мне нужно:
- Отмените расчет с начала года, чтобы получить месячную сумму, и
- Группировка по стране в часах по стране в месяц.
Моя попытка
Я сделал LAG()
GROUP BY
и CASE WHEN
отдельно. Но у меня проблемы с их объединением. Я также не знаю, как разобрать финансовый год из столбца Месяц.
SELECT
[Month]
,[Country]
,SUM([Vacation_Hours_YTD]) - coalesce(lag(SUM([Vacation_Hours_YTD])) over (partition by [Country] order by [Month]), 0) as 'Total_Vacation_Hours'
FROM Vacation_YTD_Table
GROUP BY [Month],[Country]