所以基本上我有一个查询,我想用一个日期过滤,但是这个日期可能会根据系统中的数据而改变。
如果没有日期为>='x'的记录,我想用>='y'代替
目前,我得到了如下乱七八糟的东西(为了避免使用实际的表名和类似的东西而进行了伪编码)
With a as (SELECT
count(column_id) as num
FROM tableA
WHERE ADate >= getdate() - 8)
,
b as (SELECT
case when num = '0' then getdate() - 15 else getdate() - 8 end as DateToUseInQuery
from A)
SELECT *
FROM tableB
Bunch of joins to other tables
WHERE BDate >= DateToUseInQuery
一般的想法是,如果没有记录的一周前,使用2周前
我尝试在where子句中使用一个查询,例如:
WHERE BDate >= (SELECT DateToUseInQuery FROM b)
但是查询运行了11分钟之后我停止了它(在我尝试放入这个额外的位之前大约18秒)
我一直在考虑尝试设置一个变量作为日期,但我不能在cte中这样做,当我在之后这样做时,它会破坏其他一切。
所以基本上:
有没有比我尝试的那种笨手笨脚的方式更简单的方法呢?
如果我的方式是好的,我怎么能把这个日期正确地输入where条款呢?
1条答案
按热度按时间t40tm48m1#
你可以试试这样的。我使用嵌套的select和case语句来确定天数。
也许有一个更漂亮的方法,但这是可行的。