如何创建一个查询得到发票日期之间(帮助需要的)

0

的问题

我需要建立一个查询在SQL得到一些发票,根据目前的日期。 我是个实习生的公司,所以我只需要创建的逻辑,而不必查询。 谁能帮我把这种条件下成SQL(雪花)?

  • 如果目前的日(今天的日期)之间的一天14和27个月>>>得到 发票从14天的当月
  • 如果目前的日(今天的日期)之间的28日和31个月>>>得到 发票28天的当月
  • 如果目前的日(今天的日期)之间的第1天和第13个月>>>得到的发票 从28天的最后一个月

在此先感谢!

snowflake-cloud-data-platform sql
2021-11-23 17:55:26
2

最好的答案

2

我认为你的最简单、最明确的选择是一种情况下的发言。 你可以把这个放到你的选择,并与它的工作从那里,或者把它直接进入一个条款。 什么更适合你的查询。

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)
2021-11-23 18:04:49
0
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个月的调整而不是多种情况下的发言(昂贵的运行在比例)。

enter image description here

2021-12-09 11:27:46

这可能工作,但是代码是非常神秘的我。 这很难让我看看这个和理解/预测什么样的价值将是返回的一个给定日期。 我也不明白为什么它跑得更快,因为它需要产生并比较所有的日期,而不是只有一个。
David Garrison

此外,我认为你需要过滤器之前运行的 GREATEST. 我不能获得这个正常工作,为一些日期。
David Garrison

运行得更快,因为没有任何情况下的声明或不平等谓词。 你是正确的我以前的回答是不是测试完美的-道歉。
Adrian White

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................