Kar*_*hik 3 sql snowflake-cloud-data-platform
SQL:检查付款日期是否在退货期后下个月的19号之前
\n要求是确定OnTime Payment \'Y\'/\'N\'
\n\xe2\x80\xa2 If monthly = PAID before the 19th of the month following the return period\nExample: Jan-Jan payment deadline = Feb 19\n\xe2\x80\xa2 If quarterly = paid before the 16th of the 2nd month following the return period\nExample: Jan-Mar payment deadline = May 16\n\xe2\x80\xa2 If last quarterly = paid before the 30th of the month following the return period\nExample: Oct-Dec payment deadline = Jan 30\nRun Code Online (Sandbox Code Playgroud)\n对于季度,如果是最后一个季度,则在下个月的 30 日支付,对于季度月的其余时间,则在该月的 16 日支付
\nwith data as (\n select \'Sep-Sep2021\' AS PERIOD,\n \'2021-10-11 22:09:45\' AS DT,\n \'PAID\' AS STATUS\n union all\n select \'Sep-Sep2021\' AS PERIOD,\n \'2021-10-20 22:09:45\' AS DT,\n \'PAID\' AS STATUS\n union all\n select \'Jan-Mar2021\'AS PERIOD,\n \'2021-04-11 22:09:45\'AS DT,\n \'PAID\'\n union all\n select \'Jan-Mar2021\'AS PERIOD,\n \'2021-05-20 22:09:45\'AS DT,\n \'PAID\'\n union all\n select \'Jan-Jan2021\'AS PERIOD,\n \'2021-02-11 22:09:44\'AS DT,\n \'PAID\'AS STATUS\n union all\n select \'Sep-Sep2021\'AS PERIOD,\n \'2021-10-12 04:10:00\'AS DT,\n \'CANCELLED\'AS STATUS\n union all \n select \'Jul-Sep2021\'AS PERIOD,\n \'2021-10-12 04:10:00\'AS DT,\n \'PAID\' STATUS\n union all \n select \'Oct-Dec2021\'AS PERIOD,\n \'2022-01-29 04:10:00\'AS DT,\n \'PAID STATUS\n)\nselect * from data;\nRun Code Online (Sandbox Code Playgroud)\n预期结果
\n\n编辑后添加了最后一季的作者
select
period,
CASE
WHEN REGEXP_COUNT(period,SUBSTR(period,1,3)) = 2 THEN 'monthly'
WHEN REGEXP_COUNT(period,SUBSTR(period,1,3)) = 1 AND SUBSTR(period,1,3) = 'Oct' THEN 'quaterly_last'
ELSE 'quaterly'
END AS payment_type,
CASE payment_type
WHEN 'monthly' THEN DATEADD('month', 1, TO_DATE('19'||SUBSTR(period,5), 'DDMonYYYY'))
WHEN 'quaterly' THEN DATEADD('month', 2, TO_DATE('16'||SUBSTR(period,5), 'DDMonYYYY'))
WHEN 'quaterly_last' THEN DATEADD('month', 1, TO_DATE('30'||SUBSTR(period,5), 'DDMonYYYY'))
END AS payment_deadline,
dt,
status,
CASE
WHEN status != 'PAID' THEN NULL
WHEN dt < payment_deadline THEN 'Y'
WHEN dt >= payment_deadline THEN 'N'
END AS on_time_payment
FROM data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |