Рекурсивный CTE для прогнозирования накопления отпусков

у меня есть две таблицы

  1. Leave_policy:
Leave_Type_Id Leave_Rate_Per_Every_Accural Месяцев до Annual_Max_CarryOver ЛТ1 3 0 72 ЛТ1 5 24 120 ЛТ2 4 0 96 ЛТ2 6 24 144
  1. Empl_Leave:
EMP_ID LEAVE_BALANCE Leave_Type_ID Дата_найма Последняя_Дата_начисления 701 68 ЛТ2 01.10.2002 27.07.2024 702 85 ЛТ1 12.11.1996 27.07.2024 703 230 ЛТ3 08.09.2007 27.07.2024 704 129 ЛТ1 04.03.2012 27.07.2024 705 187,5 ЛТ2 01.06.2008 27.07.2024

Моя цель — получить прогнозы отпусков сотрудников (текущий баланс отпусков + LeaveRate * Количество начислений) на следующие шесть месяцев с последней даты начисления, а также прогнозы отпусков до годовщины приема на работу сотрудника. Что-то вроде этого:

Эмпл_ИД Текущий_баланс За следующие шесть месяцев баланса До годовщины найма сотрудника 701 68 (68+нарастающее итого до 6 месяцев) (68 + промежуточная сумма до даты годовщины аренды) 702 85 (85+РабочийИтог до 6 месяцев) (85+ промежуточное количество до даты годовщины аренды)

У сотрудника есть начисление отпусков раз в две недели, так как только два в месяц, столбцы Months_until и LeaveType_Id определяют, сколько Leave_Rate_Per_Every_Accrual будет, как в первой таблице. Months_Until — это разница в периоде владения в МЕСЯЦЕ между датой начисления отпуска и датой найма. В промежутках между этими расчетами я должен следить за Annual_Max_Carryover, если дата пересекается в следующем году. Я использую SQL 2019.

Я попробовал использовать рекурсивный CTE.

Итак, каждый месяц надо отчислять из Current_balance чего, Leave_Rate_Per_Every_Accural * 2? а если balance is > Annual_Max_CarryOver, то баланс должен быть скорректирован до Annual_Max_CarryOver по прошествии года? Как From_month контролирует ситуацию?

siggemannen 09.08.2024 10:13

«какое-то расчетное значение» ничего не объясняет. Не забывайте, мы не можем ни видеть ваши характеристики, ни читать ваши мысли. Вам необходимо предоставить нам всю информацию, чтобы мы могли ответить на ваш вопрос. Это означает предоставление образцов данных и ожидаемых результатов, а также четкое определение необходимой вам логики; не расплывчатые требования.

Thom A 09.08.2024 10:48

@siggemannen, прошу прощения, я забыл добавить эту информацию в вопрос, сейчас я внес изменения в вопрос со всеми подробностями. Каждый период оплаты происходит начисление отпуска и добавляется баланс, Текущий баланс + Leave_Rate_Per_Every_Accural. Да, если целевая дата пересекает год, тогда весь текущий баланс будет сброшен до баланса Max_Carry_Over и к нему будет добавлена ​​ставка отпуска для остальных периодов оплаты до целевой даты.

Lonestar fun 10.08.2024 18:18

@ThomA, извините, я неправильно указал детали, я просто обновил вопрос, указав правильные детали. Да, я имею в виду текущий итог.

Lonestar fun 10.08.2024 18:19
Months_Until is a tenure period MONTH diff between Accrual Date and accrual Date. - возможно... и дата найма?
ValNik 10.08.2024 23:19

@ValNik — Кажется, я неправильно ввел дату начисления в эту таблицу — дата начисления одинакова для всех сотрудников с 07 по 27. Также для ""Months_Until - это разница в периоде владения МЕСЯЦОМ между датой начисления и датой начисления"" Да, сэр, это опечатка - да, это разница между датами начисления и датой найма.

Lonestar fun 10.08.2024 23:24

Для Last_Accrual_date 27 июля 2024 г., какие следующие 6 дат начисления? Если каждые 2 недели, то 2024-07-27-0, 2024-08-03(1), 2024-08-10(2), 2024-08-17(3), 2024-08-24(4), 2024-08-31(5), 2024-09-07(6) .

ValNik 10.08.2024 23:29

@ValNik - Я ищу прогнозы на следующие 6 месяцев с 07 по 27, так что это будет каждое начисление с 07 по 27 каждые две недели, но не более двух в месяц. Итак, какие бы начисления ни происходили с 07 по 27 по 01 -27-2025

Lonestar fun 10.08.2024 23:31

См. (dbfiddle.uk/oLvdmBFY). В ноябре 3 начисления( если считать каждые 2 недели).

ValNik 10.08.2024 23:33

@ValNik Да, сэр, но мне следует снимать только первые два начисления в месяц, так как есть лимит -

Lonestar fun 10.08.2024 23:34

Пожалуйста, отредактируйте вопрос и добавьте правильную дату последнего_начисления, укажите лимит начислений в 2 месяца. И From_months по сравнению с (Accrual_date-Hire_date).

ValNik 10.08.2024 23:43

@ValNik - сейчас я обновил вопрос. Извините за это

Lonestar fun 10.08.2024 23:49

Задача показалась мне интересной и довольно сложной. Пожалуйста (проголосуйте за) повторно откройте вопрос для получения ответов. Предполагаемое решение в примере (dbfiddle.uk/BmelfWkU)

ValNik 11.08.2024 20:49

Пример для SQL Server 2019 (dbfiddle.uk/dKmce3nE)

ValNik 11.08.2024 23:47
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
15
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

@VaiNik Большое спасибо. Я не могу отблагодарить вас... «Потрясающе» одним словом. Есть ли способ изменить Annual_Max_CarryOver, чтобы он происходил в годовщину найма сотрудника, а не в первый Новый год? Просто проверяю.

Lonestar fun 13.08.2024 03:13

Другие вопросы по теме