YTD для запроса ниже - PullRequest
       7

YTD для запроса ниже

1 голос
/ 13 марта 2020

Я хочу добавить добавление компонента Year to date в этот код. Я пробовал другие способы, но я не понимаю, что хотел бы увидеть. Может кто-нибудь помочь мне пересмотреть это, чтобы включить YTD в дополнение к Месяцу на дату, который уже там?

SELECT
    COST__DESC,
    ST.AD_SRV_MTN AS MONTH_OF_AD,
    COUNT(DISTINCT CM.CM_NBR) AS CMS,
    MEM_MO AS MBR_MTH,
    CMS/MBR_MTH*1000 AS CMS_PER_1000
FROM XTR.FT_CM AS CM
JOIN XTR.FT_ST AS ST ON ST.CM_NBR = CM.CM_NBR
JOIN XTR.DIM_MED_CST AS MC ON ST.CST_CK = MCC.CST_CK
JOIN XTR.DIM_AF AS AFF ON ST.PRO_CK = AFF.AFF_CK
JOIN XTR.DIM_ADJDCTN_STAT AS A_S ON ST.ADJDCTN_STAT_CK = A_S.ADJDCTN_STAT_CK
JOIN XTR.DIM_ADJ_OT AS OT ON ST.ADJ_CK = OT.ADJ_CK
LEFT JOIN
        (SELECT
            CALENDAR_YEAR_MONTH as YEAR_MO,
            SUM(MBR.COUNT_NBR) as MEM_MO
        FROM XTR.FT_MBR_MONTHS MBR
        INNER JOIN DIM_MBR_C ON MBR.DB_MBR_CK = DIM_MBR_C.DB_MBR_CK
                                AND MBR.DATE_CK BETWEEN DIM_MBR_C.DB_eff_date_ck
                                AND DIM_MBR_C.DB_END_DATE_CK
        INNER JOIN DIM_DATE DT ON ELI_DATE_CK = DT.DATE_CK
        WHERE MBR.F_C_CK = 500058321 AND YEAR_MO >= 201701
        GROUP BY 1) MM ON ST.AD_SRV_MTN = MM.YEAR_MO
WHERE ST.F_C_CK = 500058321 AND ST.ST_START_DATE_CK >= 20200101
      AND ST.AD_SRV_MTN > 201912 AND MC.MED_DESC IN ('Er', 'IP')
      AND ST.AD_SRV_MTN < ((EXTRACT (YEAR FROM CURRENT_DATE) *100) + 
                           EXTRACT (MONTH FROM CURRENT_DATE))
GROUP BY 1,2,4
ORDER BY 1,2

1 Ответ

0 голосов
/ 13 марта 2020

Честно говоря, я не получаю ваши SQL и то, что считается, но: вы можете легко играть с датами в Teradata, так как даты хранятся (и могут использоваться) внутри как INTEGER. Просто помните 1900 год как год 0 и формат ГГГГММДД. Например, 16 апреля 2020 года в формате ГГГГММДД 20200416, и если вы возьмете 1900 за 0, вы получите 1200416, который является внутренним форматом. Просто попробуйте SELECT CURRENT_DATE (INT); - так что если вы хотите сравнить YearNumers, вам просто нужно разделить на 10000.

С этим вы можете реализовать YTD как SUM (CASE WHEN CURRENT_DATE/10000 = <YourDateField>/10000 THEN <YourKPI> else 0 END) as YourKPI_YTD. Подсчет можно сделать по SUM...THEN 1 ELSE 0 END....

...