窗口框子句的当前行是否包含相等的行?

时间:2017-11-30 10:59:41

标签: sql vertica

当使用带有范围的窗口框架子句时,我们定义了窗口的起点和终点。如果我们通过具有多行值的某个值进行排序,则处理的实际行不是确定性的,并且将位于此集合中的某个位置。那么结果是否包括与当前行具有相同值的所有行?在这种情况下?

https://my.vertica.com/docs/8.1.x/HTML/index.htm#Authoring/AnalyzingData/SQLAnalytics/WindowFraming.htm没有明确提及,但似乎暗示它是实际的非确定性行。

所以如果我有下表t:

| ts                | x     |
|------------------ |---    |
| 2017-11-29 10:00  | 1     |
| 2017-11-30 10:00  | 2     |
| 2017-11-30 11:00  | 3     |
| 2017-12-01 11:00  | 4     |

以及以下查询:

with results as (
select
sum(x) over (order by ts::date range between current row and unbounded following) as r
from t
)
select r from results where ts = '2017-11-30 11:00'

它会说9(2 + 3 + 4)还是会说9或7,取决于排序方式?

如何在窗口中包含具有相同值的所有项目?

1 个答案:

答案 0 :(得分:0)

因此,当从结果中获取所有数据时,您实际上可以使用以下查询对此进行测试:

with results as (
select
sum(x) over (order by ts::date range between current row and unbounded following) as r
from t
)
select r from results

结果如下: r 10 9 9 4和那里的两个9表示它实际上包括整个日期,因为它无法进一步订购,而不仅仅是当前行。

我在Postgres 9.6上使用sqlfiddle和直接在数据库中的Vertica 8.1中测试了这个。