【问题标题】:Does current row a window frame clause include equal rows?当前行窗口框架子句是否包括相等的行?
【发布时间】:2017-11-30 10:59:40
【问题描述】:

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

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,这取决于订购的方式?

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

【问题讨论】:

    标签: sql vertica


    【解决方案1】:

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

    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 和 Vertica 8.1 上直接在数据库中使用 sqlfiddle 对此进行了测试。

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 2019-03-05
      • 2011-06-02
      • 1970-01-01
      • 2013-05-18
      • 2016-02-24
      • 1970-01-01
      • 2022-12-01
      • 2010-11-21
      相关资源
      最近更新 更多