我有一个具有以下结构的表。
|anId| aDate|aNumber|
-------------------------
| 1|2018-01-20| 100|
| 1|2019-01-01| -100|
| 1|2019-02-01| 10|
| 2|2019-01-02| 40|
我有一个查询要在特定日期返回之前(包括)aNumber
的 sum 是否> 0
针对 each 。
select
anId,
aDate,
1 as aStatus
from (
select
anId,
aDate,
sum(aNumber) OVER (
PARTITION BY anId
ORDER BY aDate
ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING
) as aSum
from
myTable
)
where
aSum > 0
;
所以这个查询会返回
|anId| aDate|aStatus|
-------------------------
| 1|2018-01-20| 1|
| 2|2019-01-02| 1|
| 1|2019-02-01| 1|
现在我已经把 query 变成了 view myView
。我想查询此视图的日期范围。我可以每天/每月/每年查询表格,但我希望能够从一个日期范围导出查询结果,然后导出/附加下一个日期范围的结果。
select
anId,
aDate,
aStatus
from
myView
where
aDate between (2018-01-01) and (2018-12-31)
;
会回来
|anId| aDate|aStatus|
-------------------------
| 1|2018-01-20| 1|
明年
select
anId,
aDate,
aStatus
from
myView
where
aDate between (2019-01-01) and (2019-12-31)
;
应该返回
|anId| aDate|aStatus|
-------------------------
| 2|2019-01-02| 1|
| 1|2019-02-01| 1|
允许我将结果拼接在一起以获得原始的、未过滤的视图记录。
好的,现在舞台已经设置好,我对这种方法的担忧是,当我从视图中过滤日期时,它会影响窗口函数。
当我过滤 2019 年时,加窗总和是否仍包括 2018 年aNumber
?我的日期范围过滤器会在总和之前应用于内部选择吗?