我需要建立一个查询在SQL得到一些发票,根据目前的日期。 我是个实习生的公司,所以我只需要创建的逻辑,而不必查询。 谁能帮我把这种条件下成SQL(雪花)?
- 如果目前的日(今天的日期)之间的一天14和27个月>>>得到 发票从14天的当月
- 如果目前的日(今天的日期)之间的28日和31个月>>>得到 发票28天的当月
- 如果目前的日(今天的日期)之间的第1天和第13个月>>>得到的发票 从28天的最后一个月
在此先感谢!
我需要建立一个查询在SQL得到一些发票,根据目前的日期。 我是个实习生的公司,所以我只需要创建的逻辑,而不必查询。 谁能帮我把这种条件下成SQL(雪花)?
在此先感谢!
我认为你的最简单、最明确的选择是一种情况下的发言。 你可以把这个放到你的选择,并与它的工作从那里,或者把它直接进入一个条款。 什么更适合你的查询。
WHERE invoice_date::DATE = (CASE WHEN DAY(current_date) between 14 and 27 then DATE_FROM_PARTS(YEAR(current_date), MONTH(current_date), 14)
WHEN DAY(current_date) between 28 and 31 then DATE_FROM_PARTS(YEAR(current_date), MONTH(current_date), 28)
WHEN DAY(current_date) between 1 and 13 then DATEADD('month', -1, DATE_FROM_PARTS(YEAR(current_date), MONTH(current_date), 28))
END)
select
current_date()+1 your_date
,dateadd(day,27-(sign(FLOOR(day(your_date)/14,0))*14)
,dateadd(month,sign(FLOOR(day(your_date)/14,0))-1
,date_trunc(month,your_date))) your_result
修订后的解决方案。
消除不平等现象和减少该问题降到的倍数,14个月的调整而不是多种情况下的发言(昂贵的运行在比例)。
GREATEST
. 我不能获得这个正常工作,为一些日期。