我沒有太多經驗,我無法解決這個問題。
我需要根據將由 API 請求發送的“SYSDATE”日期,將這個 SQL 的結果顯示為“NEXT QUARTER”的資料。
我資料庫中的實際季度是:Q2。
根據我在下面運行的這個查詢,似乎一切都按預期作業,因為我在今天的日期發送請求,在當前季度,所以這個 SQL 給我帶來了下一季度專案的結果(顯然)
select
dgl.LABEL as goLiveName
,dgl.GOLIVE_DATE_ACTUAL as planningCurrent
,dgl.GOLIVE_DATE_PLANNED as planningBaseline
,dgl.EFFECTIVE_START_DATE as effectiveStartDate
,dgl.EFFECTIVE_END_DATE as effectiveEndDate
from DATALAKE.DWL_GOLIVE dgl
where
and to_char(dgl.GOLIVE_DATE_PLANNED, 'yyyy - q') = to_char(add_months(sysdate, 1), 'yyyy - q')
AND ( :nextquarter = 'true')
order by goLiveName, planningCurrent asc
這是結果:
例子
但現在我正在模擬 7 月的任何日期,例如“07/12/22”,并且由于它已經在第三季度(根據我的資料庫),結果必須是第四季度的專案,但它繼續帶來Q3的結果
像這樣:
select
dgl.LABEL as goLiveName
,dgl.GOLIVE_DATE_ACTUAL as planningCurrent
,dgl.GOLIVE_DATE_PLANNED as planningBaseline
,dgl.EFFECTIVE_START_DATE as effectiveStartDate
,dgl.EFFECTIVE_END_DATE as effectiveEndDate
from DATALAKE.DWL_GOLIVE dgl
where
to_char (dgl.GOLIVE_DATE_PLANNED, 'yyyy - q' ) = to_char (add_months (to_date('07/12/22', 'mm/dd/yy'), 1), 'yyyy - q' ) -- EXEMPLO
AND ( :nextquarter = 'true')
order by goLiveName, planningCurrent asc
結果:結果
如果我用 1 更改這一行:
to_char (dgl.GOLIVE_DATE_PLANNED, 'yyyy - q' ) = to_char (add_months (to_date('07/12/22', 'mm/dd/yy'), 1), 'yyyy - q' )
對于這條線,不同之處在于 3 并將帶來第四季度的專案:
to_char (dgl.GOLIVE_DATE_PLANNED, 'yyyy - q' ) = to_char (add_months (to_date('07/12/22', 'mm/dd/yy'), 3), 'yyyy - q' )
這就是我想要的結果
結果 3
我意識到,如果差異是 1 個月,則只需 1,如果差異是 2 個月 2,如果差異是 3 個月 3。如何調整我的 SQL 總是帶來下一個季度?
uj5u.com熱心網友回復:
你總是可以加 3 個月——今天也可以,你不需要加 1 個月;這只是今天可以使用的最低限度。今天(六月)加上 3 個月將是九月,這仍然是第三季度。
不過,與字串進行比較并不理想。如果您的日期列上有索引,則轉換為字串將阻止使用該索引,并且您必須轉換每一行中的值以進行比較(除非您添加了基于函式的索引)。
最好使用日期范圍,基于在當前季度開始時增加三個月和六個月;就像是:
where dgl.GOLIVE_DATE_PLANNED >= add_months(trunc(sysdate, 'Q'), 3)
and dgl.GOLIVE_DATE_PLANNED < add_months(trunc(sysdate, 'Q'), 6)
要查看它在做什么,您可以查看所涉及的值:
select sysdate as today,
trunc(sysdate, 'Q') as current_q_start,
add_months(trunc(sysdate, 'Q'), 3) as next_q_start,
add_months(trunc(sysdate, 'Q'), 6) as following_q_start
from dual
TODAY CURRENT_Q_START NEXT_Q_START FOLLOWING_Q_START
------------------- ------------------- ------------------- -------------------
2022-06-03 23:41:13 2022-04-01 00:00:00 2022-07-01 00:00:00 2022-10-01 00:00:00
因此,日期范圍將涵蓋從 7 月 1 日午夜到(但不包括)10 月 1 日午夜的所有時間;也就是整個七、八、九月份,也就是整個下個季度,Q3。
如果在 7 月 12 日運行,您將看到:
TODAY CURRENT_Q_START NEXT_Q_START FOLLOWING_Q_START
------------------- ------------------- ------------------- -------------------
2022-07-12 00:00:00 2022-07-01 00:00:00 2022-10-01 00:00:00 2023-01-01 00:00:00
日期范圍涵蓋整個第四季度。
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486122.html
