【问题标题】:Calculate current quarter Fiscal_start date based off 13 week (91 day) rolling quarters根据 13 周(91 天)滚动季度计算当前季度 Fiscal_start 日期
【发布时间】:2020-05-19 16:22:38
【问题描述】:

我正在寻找一个在 Oracle Developer SQL 中工作的 SQL 解决方案,它将根据 sysdate 计算当前季度的开始和结束日期,并且会计日历从 2020 年 2 月 1 日开始。每个季度是固定的 13 周( 91 天)-- 不是 3 个月,因此每年的会计日历略有不同。
代码将被上传到自动报告中,并且不想每年调整它。 附上本年度会计日历作为示例说明。 Current Fiscal Calendar

我开始走这条路,但当我意识到开始日期无法以这种格式正确时迷路了。

结束解决方案将用于 where 子句以确定报告日期范围,例如 (其中 Report_Date 在 Modified_Quarter_Start 和 sysdate 之间)

select trunc(add_months(add_months(trunc(sysdate,'Y') -1 ,
to_number(to_char(sysdate,'Q')) * 3),-1),'MM') 
start_date,trunc(add_months(add_months(trunc(sysdate,'Y') -1 ,
to_number(to_char(sysdate,'Q')) * 3),+2),'MM')-1 Endd_date,
add_months(trunc(sysdate,'Y') -1 ,to_number(to_char(sysdate,'Q')) * 3) end_date ,
to_char(sysdate,'YYYY - q') qtr from dual

非常感谢任何帮助。

【问题讨论】:

  • 所以你的季度总是从星期日开始,每年提前 1 或 2 天开始?这应该返回季度的第一天:date '2020-02-01' + (trunc((current_date - date '2020-02-01') / 91) * 91),加上 90 天得到 last_day
  • 请提供更多示例数据。例如,2021-01-31 的会计日期是什么时候? 2022-01-31 的? 2030-01-31 的?
  • 看来我和你一样打字,请看下文。 2021 年 1 月 31 日财政日期将是 22 财年第一季度。对于这么大的公司来说,这是一种非常奇怪的财务日历方式。
  • 季度实际上总是从星期六开始

标签: sql date oracle-sqldeveloper calculation


【解决方案1】:

发布以防其他人在未来遇到同样的困境。 在另一个线程中阅读了关于固定天数的案例声明后,我想到了这个解决方案。

Select Trunc(sysdate - to_date('02-Feb-2019')), 
Case When Trunc(sysdate - to_date('02-Feb-2019')) > 91 Then to_date('02-Feb-2019') + 
Round( to_number(Trunc(sysdate - to_date('02-Feb-2019'))/91),0) * 91 
Else null End Current_Quarter_Start, 
Case When Trunc(sysdate - to_date('02-Feb-2019')) > 91 Then to_date('02-Feb-2019') + 
( (Round( to_number(Trunc(sysdate - to_date('02-Feb-2019'))/91),0) +1 )* 91)-1 Else null End Current_Quarter_End From Dual 

【讨论】:

  • 你试过我的计算了吗?
  • 是的,让当前季度运行良好,但不适用于未来季度。我在上面发布的解决方案说明了未来几个季度。
  • 当然,它也适用于未来几个季度。只需使用任何日期而不是 sysdate/current_date。对照你的日历表试试(假设你已经有了)
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2022-08-02
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多