按日期限制查询结果

uurv41yg  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(399)

我有一个由多个连接子句构造的工作查询。其中一列是recorddate。我只想在以下条件下显示记录:recorddate>(整个报表的最大(recorddate)-40)天。换言之,记录的日期是最早的日期或40天前。我注意到我无法计算where子句中的date-40,因此我创建了一个date\cte查询来提供计算出的“旧日期”。

WITH date_CTE(PrevDate,sd) AS
    (SELECT dateadd(DAY,-33,max(ScanDate)),ScanDate
    FROM v_TthreatsCombined
    GROUP BY scanDate)
    SELECT MAX(prevDate) FROM date_CTE

我未能将“select max(prevdate)from date\ cte”的结果加入where。
查询有点像这样:

SELECT col1,col2.col3,ScanDate
FROM table1
Left Join ....
Left Join ...
WHERE condition1 AND (condition2 OR condition3) AND <SELECT MAX(prevDate) FROM date_CTE>

我走的路对吗?谢谢你的帮助。
阿莫斯

zlwx9yxi

zlwx9yxi1#

一个选项使用窗口函数。根据您的伪代码,这看起来像:

select *
from (
    select col1, col2, col3, scandate, max(scanDate) over() maxScanDate
    from table1
    left join ....
    left join ...
    where condition1 and (condition2 or condition3)
) t
where scanDate > dateadd(day, -33,  maxScanDate)
nx7onnlm

nx7onnlm2#

我只想用 CTE (或只是一个子查询)来计算开始日期。不管怎样,你需要 JOIN 这个 CTE 或子查询到您的 FROM 条款。我会对连接进行过滤。

DECLARE @t TABLE (dt DATE, val INT);

INSERT @t (dt, val)
VALUES ('20200101', 1),
       ('20200201', 2),
       ('20200301', 3)

WITH date_CTE(StartDt) AS 
(
    SELECT DATEADD(DAY, -40, MAX(dt)) AS StartDt
    FROM @t
)
SELECT val
FROM @t AS T
JOIN
    date_CTE AS d
    ON T.dt >= d.StartDt

max date减去四十天返回表中最新的两个条目:

+-----+
| val |
+-----+
|   2 |
|   3 |
+-----+

相关问题