2015-10-29 66 views
0

我正在處理以下查詢,並無法弄清楚它的最後一部分。我需要查詢來給我一個前一個業務和前一個業務日之間的結果集減去( - )28天。 (例如日期範圍在2015年10月28日至2015年10月28日-28之間)至此我寫的查詢僅給出第-28天(2015年9月30日),而不是之前業務一天和前一個營業日-28。我的研究顯示了幾種不同的做法,至今沒有人爲我工作。複雜日期範圍

SELECT SMBL, SUM(NET_FLOWS/1000000.00) 
FROM HISTORY 
WHERE DATE - 28 = DATE AND DATE = TO_DATE('10282015','MMDDYYYY') 
AND SYMBOL IN ('AAA','BBB') 
GROUP BY SMBL 
+0

'TO_DATE('10282015','MMDDYYYY') - 28和TO_DATE('10282015','MMDDYYYY')'之間的WHERE DATE怎麼樣? BETWEEN是包容性的。 –

+1

DATE-28 = DATE如何解析爲TRUE? –

+0

@MarmiteBomber是的,它的工作。感謝您的幫助 – ace123

回答

0

首先,日期範圍是容易使用BETWEEN,所以你做快速的解決方案:

WHERE DATE BETWEEN (SYSDATE-28) and (SYSDATE-1) 

然後你意識到你的日期有時間組件,因此包括所有昨天整天的-28你需要:

WHERE DATE >= TRUNC(SYSDATE)-28 
AND DATE < TRUNC(SYSDATE) 

然後我看你的規則「上一個營業日」,並問 - 你的工作日是什麼?在星期一去上一個星期五?還是星期六?或者你是一個每週7天的生意?法定節假日怎麼樣? 28日曆回來了嗎?還是28個工作日?

啊業務規則。魔鬼總是在那些細節中......

+0

回答你的一些問題。我們是一個週一至週五(5個工作日)的公司。因此,如果它的星期一那麼我們將恢復到星期五的數據業務日期。我使用28天的原因是因爲我們使用4周的日期範圍進行計算,因此這是28天來自的時間。您對sysdate-28的查詢已關閉,因爲我的出發點是上一個業務日期而非當前日期。然而,簡單地增加一天例如sysdate - 29,查詢工作正常。謝謝。 – ace123

+0

是的,生意-1然後 - 28.我錯過了額外的一天。就像我說過的那樣,它總是讓你感覺到的小細節:-) –