2014-01-26 32 views
0

我有多個相當大的查詢連接,並且每個連接具有我目前作爲輸入我可以將時間限制作爲Between()函數的數組嗎?

between to_date('06/01/2013','MM/DD/YYYY') and to_date('09/30/2013','MM/DD/YYYY') 

我想使查詢更加動態通過抓取開始和結束時間限制的時間範圍條件從

SELECT MAX(First) TRI_START, MAX(Last) TRI_END 
FROM(
    SELECT 
     ADD_MONTHS(W1.TRIMESTER_INDICATOR, -3) AS First, 
     (ADD_MONTHS(W1.TRIMESTER_INDICATOR, +1))-1 AS Last 
    FROM ACCOUNT_11 
    GROUP BY ADD_MONTHS(W1.TRIMESTER_INDICATOR, -3),(ADD_MONTHS(W1.TRIMESTER_INDICATOR, +1))-1 
    ) 

我想知道如果我可以利用上述整個查詢?

任何幫助將是真棒!

謝謝:)

樣品查詢:

SELECT T1.A, T2.B, T3.C,... COUNT(DISTINCT(T3.X)), COUNT(DISTINCT(T4.Y)),.. 
FROM T1 
LEFT JOIN T2 ON T1.w = T2.w 
LEFT JOIN T3 ON T3.o = T2.o AND TRUNC(T3.SAMPLE_DATE) between to_date('06/01/2013','MM/DD/YYYY') AND to_date('09/30/2013','MM/DD/YYYY') 
.... 
.... 
WHERE T1.TRIMESTER_INDICATOR = (SELECT MAX(TRIMESTER_INDICATOR) TRI_IND 
           FROM(
            SELECT TRIMESTER_INDICATOR 
            FROM ACCOUNT_11 
            GROUP BY TRIMESTER_INDICATOR 
            ) 
           ) 
GROUP BY T1.A, T2.B, T3.C,... 

我用的CTE,然後試圖在東西堵狀

AND TRUNC(T3.SAMPLE_DATE) between dates.TRI_START AND dates.TRI_END 

但它拋出一個無效的標識符錯誤。我不確定如何正確引用日期。 編輯:這現在偉大的工程!由於

PS:我爲我在做編輯的意見缺乏經驗道歉。

回答

2

你可以使用一個CTE:

with dates as (
     SELECT MAX(First) TRI_START, MAX(Last) TRI_END 
     FROM (SELECT ADD_MONTHS(W1.TRIMESTER_INDICATOR, -3) AS First, 
        (ADD_MONTHS(W1.TRIMESTER_INDICATOR, +1))-1 AS Last 
      FROM ACCOUNT_11 
      GROUP BY ADD_MONTHS(W1.TRIMESTER_INDICATOR, -3),(ADD_MONTHS(W1.TRIMESTER_INDICATOR, +1))-1 
      ) 
    ) 
select . . . 
from . . . cross join 
    dates d 
. . . 

然後,您可以使用日期查詢。如果您在子查詢中需要它們,則可以添加另一個cross join

+0

戈登,感謝您的及時回覆!雖然我得到這個概念,但我對語法不清楚。嘗試在網上做一些快速研究,但無濟於事。如果可能,你能幫忙嗎?所以我的查詢的結構如下:>選擇...>從T1>左連接上T2>左連接T3上t2.a = t3.b之間t3.sample_date(..)>等 – flipflop99

+0

@ flipflop99。 。 。用一個小樣本查詢編輯您的問題。 –

+0

我剛剛做到了。謝謝你的幫助 :) – flipflop99

相關問題