Разбиение ежемесячных данных на ежедневные в Snowflake - PullRequest
0 голосов
/ 17 июня 2020

этот вопрос похож на тот, который размещен здесь: Разбить ежемесячные данные на ежедневные

Однако я пытаюсь добиться этого с помощью Snowflake. Вот несколько примеров данных:

+--------------------+----------+---------------------------+----------+---------------+--------+
|         ID         | METRIC_C | OPPORTUNITY_RECORD_TYPE_C | REGION_C | METRIC_DATE_C | GOAL_C |
+--------------------+----------+---------------------------+----------+---------------+--------+
| a0c0W00000P180rQAB | MQL      | Buyer: New                | Europe   | 2020-11-01    |    227 |
| a0c0W00000P181UQAR | Won      | Buyer: New                  Europe   | 2020-02-01    |      1 |
| a0c0W00000P180yQAB | SAL      | Buyer: New                | Europe   | 2020-06-01    |     34 |
+--------------------+----------+---------------------------+----------+---------------+--------+

В принципе, я хочу, чтобы значения ID, METRIC_ C, OPPORTUNITY_RECORD_TYPE_ C, REGION_ C повторялись и чтобы были значения даты для всего месяц. Ценность цели должна быть поровну разделена на количество дней в месяце. Кажется, я не могу заставить код работать в Snowflake. Вот что у меня есть:

with cte as
(select ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, METRIC_DATE_C, GOAL_C
 from GOAL_C
 where METRIC_DATE_C > '2019-12-31'
 union all
 select ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, dateadd(d, 1, METRIC_DATE_C) METRIC_DATE_C, GOAL_C
 from cte
 where datediff(m,METRIC_DATE_C,dateadd(d, 1, METRIC_DATE_C))=0
 and METRIC_DATE_C > '2019-12-31'
)
select ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, METRIC_DATE_C, 
       1.0*GOAL_C / count(*) over (partition by ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, METRIC_DATE_C) GOAL_C
from cte
order by 1,2,3,4,5

Кажется, что код не разделяет месяц на дни. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 17 июня 2020

Ваш код в порядке, только небольшая настройка синтаксиса снежинки сделала свою работу. Вот вам go:

with cte as
(select ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, METRIC_DATE_C, GOAL_C
 from DB_NM.SCHEMA_NM.TABLE_NM
 where METRIC_DATE_C > '2019-12-31'
 union all
 select ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, dateadd(day, 1, METRIC_DATE_C) METRIC_DATE_C, GOAL_C
 from cte
 where datediff(month,METRIC_DATE_C,dateadd(day, 1, METRIC_DATE_C))=0
 and METRIC_DATE_C > '2019-12-31'
)
select ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, METRIC_DATE_C, 
       1.0*GOAL_C / count(*) over (partition by ID, METRIC_C, OPPORTUNITY_RECORD_TYPE_C, REGION_C, METRIC_DATE_C) GOAL_C
from cte
order by 1,2,3,4,5
;

Спасибо

...