【发布时间】:2021-12-31 17:20:29
【问题描述】:
我有一个表格,它的日期时间对应于不同的状态:为每个用户点击、认领和购买。
我折叠了每个用户的记录,并将每个状态对应的每个日期时间放在他们自己的列中:clicked_date、claim_date和buy_date。我也有一个截止日期。
现在我需要另一个列来计算截止日期的天数。新列(number_days)应该总是减去deadline_date 减去clicked_date。但是,如果 clicked_date 设置为“2999-12-31”,那么它应该减去deadline_date 减去claim_date。如果clicked_date 设置为“2999-12-31”并且claimed_date 设置为=“299-12-31”,那么它应该减去截止日期减去购买日期。如果 clicked_date 设置为“2999-12-31”,claim_date 设置为“2999-12-31”,buy_date 设置为“2999-12-31”或deadline_date = '/N',那么它应该为0。
In the examples above,
The first record should be (deadline_date - bought_date)
The second record should be (deadline_date - clicked_date)
The third record should be 0.
The fourth record should be (deadline_date - claimed_date)
The fifth record should be (deadline_date - claimed_date)
The sixth record should be (deadline_date - clicked_date)
我无法制定此查询。有谁知道我如何根据点击、认领和购买的三个不同日期列中的每一个来计算天数?
我尝试了类似的方法,但它不起作用:
select
user,
(array_agg(STATUS) within group(order by UPDATED_AT_DATETIME desc)[0])::varchar as last_status,
coalesce(max(case when STATUS = 'clicked' THEN UPDATED_AT_DATETIME END),'2999-12-31'::datetime) as clicked_date,
coalesce(max(case when STATUS = 'claimed' THEN UPDATED_AT_DATETIME END),'2999-12-31'::datetime) as claimed_date,
coalesce(max(case when STATUS = 'bought' THEN ACCOUNT_REWARD_UPDATED_AT_DATETIME END),'2999-12-31'::datetime) as bought_date,
**case when CLICKED_DATE <> '2999-12-31 00:00:00.000' then DATEDIFF('days', TRY_TO_TIMESTAMP(clicked_date) ,TRY_TO_TIMESTAMP(DEADLINE_DATETIME))
when claimed_date <> '2999-12-31 00:00:00.000' then DATEDIFF('days', TRY_TO_TIMESTAMP(claimed_date) ,TRY_TO_TIMESTAMP(DEADLINE_DATETIME))
when bought_date <> '2999-12-31 00:00:00.000' then DATEDIFF('days', TRY_TO_TIMESTAMP(bought_date) ,TRY_TO_TIMESTAMP(DEADLINE_DATETIME))
END as number_days**
from TBL_A a
group by 1,2
【问题讨论】:
标签: sql snowflake-cloud-data-platform snowflake-schema