Расчет владения с помощью TeraData SQL - PullRequest
1 голос
/ 24 февраля 2020
  • Элемент списка

Мне было труднее всего преобразовать этот T- SQL в TeraData SQL. Может ли кто-нибудь помочь мне с этим. Я бы действительно оценил это. Я не понимаю преобразование дат с teradata. Я в замешательстве.

Пример финансового месяца: Запуски: 2020-22-01 - Концы: 2020-21-01 Этот запрос доставляет результаты данных в течение финансового месяца с начал там положение. Пример: 21.08.2009


   ,CASE WHEN DAY(POSITION_START_DT) BETWEEN 22 AND 31 
         THEN CAST(
               CONCAT(
               CAST(YEAR(POSITION_START_DT)AS VARCHAR(4)),
               CASE WHEN LEN(MONTH(POSITION_START_DT)) = 1 THEN '-0' ELSE '-'END,
               CAST(MONTH(POSITION_START_DT)AS VARCHAR(2)),
               '-21') 
               AS date)

          WHEN DAY(POSITION_START_DT) BETWEEN 1 AND 6 
          THEN CAST(
               CONCAT(
               CAST(YEAR(DATEADD(MONTH,-1,POSITION_START_DT))AS VARCHAR(4)),
               CASE WHEN LEN(MONTH(DATEADD(MONTH,-1,POSITION_START_DT))) = 1 THEN '-0' ELSE '-'END,
               CAST(MONTH(DATEADD(MONTH,-1,POSITION_START_DT))AS VARCHAR(2)),
               '-21') 
           AS date) 

         ELSE CAST(
               CONCAT(
                   CAST(YEAR(DATEADD(MONTH,0,POSITION_START_DT))AS VARCHAR(4)),
                   CASE WHEN LEN(MONTH(DATEADD(MONTH,0,POSITION_START_DT))) = 1 THEN '-0' ELSE '-'END,
                   CAST(MONTH(DATEADD(MONTH,0,POSITION_START_DT))AS VARCHAR(2)),
                   '-21')
               AS date) END AS FISCAL_START_MONTH_INSALES

Бюджетное ведение владения использует поле «Fiscal_Start_Month_insales» и группирует сотрудника в ведро. Ведра: - 0_3_MONTHS - 4_6_MONTHS - 7_12_MONTHS - 13_24_RU - 13_24_RU - Иначе Неизвестно


    ,CASE  WHEN DATEDIFF(Day,FiscalStartMonthInSales,CURRENT_DATE)/30  >= 25 THEN '25_PLUS_MONTHS'
                       WHEN DATEDIFF(Day,FiscalStartMonthInSales,CURRENT_DATE)/30  BETWEEN 13 AND 24 THEN '13_24_MONTHS'
                       WHEN DATEDIFF(Day,FiscalStartMonthInSales,CURRENT_DATE)/30  BETWEEN 7 AND 12 THEN '7_12_MONTHS'
                       WHEN DATEDIFF(Day,FiscalStartMonthInSales,CURRENT_DATE)/30  BETWEEN 4 AND 6 THEN '4_6_MONTHS'
                       WHEN DATEDIFF(Day,FiscalStartMonthInSales,CURRENT_DATE)/30  BETWEEN 0 AND 3 THEN '0_3_MONTHS'
                       ELSE 'Unknown' END as PositionTenureBucket

Приветствия ~ Аррон

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Упрощение первой части Фреда до:

Cast(To_Char(CASE WHEN Extract(DAY From POSITION_START_DT) BETWEEN 1 AND 6 
                  THEN Add_Months(POSITION_START_DT,-1)
                  ELSE POSITION_START_DT
             END, 'yyyy-mm') || '-21' AS DATE) 

И упрощение логики c до вычитание 6 дней, получение 1-го числа месяца и добавление 20 дней :

Trunc(POSITION_START_DT - 6, 'mon') + 20
0 голосов
/ 24 февраля 2020

Просто преобразовав функции (и комбинируя два случая, которые, кажется, дают идентичные результаты), кажется, что первая часть может быть

CASE WHEN EXTRACT(DAY FROM POSITION_START_DT) BETWEEN 1 AND 6
     THEN CAST(CAST(CAST(ADD_MONTHS(POSITION_START_DT,-1) AS FORMAT 'YYYY-MM') AS VARCHAR(7))||'-21' AS DATE FORMAT 'YYYY-MM-DD')
     ELSE CAST(CAST(CAST(POSITION_START_DT AS FORMAT 'YYYY-MM') AS VARCHAR(7))||'-21' AS DATE FORMAT 'YYYY-MM-DD')
     END AS FISCAL_START_MONTH_INSALES

И, возможно, вторая часть просто

 ,CASE WHEN (CURRENT_DATE-FiscalStartMonthInSales)/30  >= 25 THEN '25_PLUS_MONTHS'
       WHEN (CURRENT_DATE-FiscalStartMonthInSales)/30   BETWEEN 13 AND 24 THEN '13_24_MONTHS'
       WHEN (CURRENT_DATE-FiscalStartMonthInSales)/30   BETWEEN 7 AND 12 THEN '7_12_MONTHS'
       WHEN (CURRENT_DATE-FiscalStartMonthInSales)/30   BETWEEN 4 AND 6 THEN '4_6_MONTHS'
       WHEN (CURRENT_DATE-FiscalStartMonthInSales)/30   BETWEEN 0 AND 3 THEN '0_3_MONTHS'
       ELSE 'Unknown' END as PositionTenureBucket
...