Расчет скользящего квартала на сегодняшний день - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь рассчитать значения «квартал на дату» для каждого финансового года.Основные поля в моем наборе данных можно суммировать как:

Идентификатор клиента, Дата начала обслуживания, Дата окончания обслуживания, Уровень обслуживания

У меня есть функция, которая при перекрестном умножении даты начала и окончанияполя, создает запись для каждого месяца.Обратите внимание, мой финансовый год начинается в апреле.Поэтому моя таблица выглядит примерно так:

Customer ID, Service Start Date, Service End Date, Service Level, Fiscal Year, Fiscal Quarter, Fiscal Month Start
12345, Jan 1, 2019, Apr 30, 2019, 93, Q4, Jan 2019
12345, Jan 1, 2019, Apr 30, 2019, 93, Q4, Feb 2019
12345, Jan 1, 2019, Apr 30, 2019, 93, Q4, Mar 2019
12345, Jan 1, 2019, Apr 30, 2019, 93, Q1, Apr 2019

С чем я борюсь, так это с тем, что я хочу посчитать уникальный квартал на сегодняшний день для НАИБОЛЬШЕГО уровня обслуживания клиента в течение финансового года.Поэтому мы хотим сгруппировать каждый финансовый год с наивысшим уровнем обслуживания этого клиента.

Например, если клиент начал обслуживание с уровнем обслуживания 93 в ноябре 2018 года, а клиент закончил обслуживание с уровнем обслуживания 94 в мае 2019 года

Если этот гипотетический пациент изменил уровни обслуживания в течение 1819 финансового года, я хочу иметь возможность получить последний квартал на дату в рамках счета финансового года: Q3 2018: 1 для SRC 94, Q4 2018: 2 для SRC 94, Q1 2019: 1для SRC 94 Q2 2019: 1 для SRC 94 Q3 2019: 1 для SRC 94

Но если бы они перешли на уровень обслуживания в апреле 2019 года (это другой финансовый год), мои показатели были бы

Q3 2018: 1 for SRC 93
Q4 2018: 2 for SRC 93
Q1 2019: 1 for SRC 94
Q2 2019: 1 for SRC 94
Q3 2019: 1 for SRC 94

То, что я получил до сих пор, это «уникальный счет» на пациента в квартал с помощью функции row_number:

select ROW_NUMBER() OVER(PARTITION BY customer_ID, FISCALYEAR, Fiscalquarterstartdate ORDER BY fiscalmonthstartdate DESC) PtRnk
into #Temp

И тогда я бы выбрал все записи, которые имеют ptRnk = 1, а затемСуммируйте это поле.

Я немного борюсь за то, как бороться с состоянием, которое я обрисовал в общих чертах выше.Спасибо за любую помощь, спасибо.

1 Ответ

0 голосов
/ 25 сентября 2019

Используйте подзапрос, чтобы получить наивысший уровень обслуживания, а затем выполните простую группу:

непроверено

select T1.Customer_ID, T1.Fiscal_Quarter, T1.Fiscal_Year,
   count(*) Services_Received, T2.Service_Level
from YourTable T1
inner join (
   select Customer_ID, Fiscal_Year, max(Service_Level) Service_Level
   from YourTable
   group by Customer_ID, Fiscal_Year
) T2
   on T1.Customer_ID = T2.Customer_ID
   and T1.Fiscal_Year = T2.Fiscal_Year
group by T1.Customer_ID, T1.Fiscal_Quarter, T1.Fiscal_Year, T2.Service_Level
...