Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我可以将时间限制作为Between()函数的数组传递吗?_Sql_Oracle - Fatal编程技术网

Sql 我可以将时间限制作为Between()函数的数组传递吗?

Sql 我可以将时间限制作为Between()函数的数组传递吗?,sql,oracle,Sql,Oracle,我有一个相当大的查询,其中包含多个联接,每个联接都有一个时间范围条件,我当前正在输入该条件 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.TRIMEST

我有一个相当大的查询,其中包含多个联接,每个联接都有一个时间范围条件,我当前正在输入该条件

 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:很抱歉我没有编辑评论的经验。

您可以使用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
. . .

然后可以使用查询中的日期。如果您在子查询中需要它们,那么您可以添加另一个
交叉连接

Gordon,感谢您的快速响应!虽然我了解了这个概念,但我不清楚语法。。尝试在网上做一些快速的调查,但没有结果。如果可能的话,你能帮忙吗?因此,我的查询结构如下:>选择…>从t1>左连接t2 on>左连接t3 on t2.a=t3.b和t3.sample_日期介于(..)>之间,依此类推on@flipflop99 . . . 用一个小的示例查询编辑你的问题。我刚刚做了。谢谢你的帮助:)