2011-04-19 44 views
0

我需要獲取所有記錄,包括上週的星期天和星期六之間的日期(包括該日期),以查詢運行的日期。對於今天的2011年4月19日,這將是4月10日至4月16日。Oracle BI:選擇上週的所有記錄

當我手動輸入的日期和轉換的過濾器,以SQL,我得到的語法如下:

RESOLVED_DATE BETWEEN timestamp '2011-04-10 00:00:00' AND timestamp '2011-04-16 00:00:00' 

我什至不知道這是正確的,因爲它似乎排除16日本身日期(不應該的時間是23時59分59秒?)

回答

2

有可能確定要使用和next_day組合定期日期計算的日期。下面的代碼應該是相當接近,但它是未經測試,可能無法在某些極端情況,但至少你得到的總體思路:)

where resolved_date >= next_day(trunc(sysdate) - interval '14' day, 'SUN') 
    and resolved_date < next_day(trunc(sysdate) - interval '7' day, 'SUN') 

trunc(sysdate)截斷日期天; 2011-04-19 23:32:34變成2011-04-19 00:00:00,即刪除時間組件。 next_day(sysdate, 'SUN')返回下一個星期日。如果sysdate恰好是星期日,則返回下一個星期日。
重要:日期名稱必須與會話語言相同。
interval東西只是從日期開始添加/減去不同時間單位的標準方式。

全部放在一起,爲2011年4月19日的邏輯將是:

  1. 截斷SYSDATE => 2011-04-19 0時零零分00秒
  2. 減法14天=> 2011- 04-05 00:00:00
  3. 查找下一個星期日=> 2011-04-10 00:00:00

...和

  1. 截斷SYSDATE => 2011-04-19 0時00分00秒
  2. 減法7天=> 2011-04-12 0時00分00秒
  3. 查找下一個星期日=> 2011-04-17 00: 00:00

..resulting在下面的查詢:

where resolved_date >= timestamp '2011-04-10 00:00:00' 
    and resolved_date < timestamp '2011-04-17 00:00:00' 

所有resolved_dates所發生的或10的第一秒後:日,但17的第一秒前:日將被包括在內。請注意,>=<不等於between

有關性能的說明:我會確保Oracle正確估計日期範圍爲7天,並且使用正確的連接順序/方法。如果您希望查詢運行一段時間,則可以計算應用程序中的日期,並將它們作爲日期文件提供,而不是像上面那樣在運行時進行計算。

+0

即使它在我的環境中不起作用,我也接受了它,因爲它使我找到了正確的答案。 – 2011-06-14 01:05:52