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 . . . 用一个小的示例查询编辑你的问题。我刚刚做了。谢谢你的帮助:)