sql - Snowflake 中的 STDDEV Windows 函数 : not getting a uniform value according to the partition

标签 sql snowflake-cloud-data-platform

我想获得按reg、日期和小时划分的加速度的标准差。因此,我希望使用以下代码根据这些分区获得统一的值,但我为每一行获得不同的值:

SELECT *,
       STDDEV(ACCELERATION)OVER(PARTITION BY REG, DATE, HOUR ORDER BY TIMESTAMP)
  
FROM 

(
  
SELECT 
       *,
       SPEED_DIFFERENCE/ TIMESTAMP_DIFFERENCE AS ACCELERATION

FROM 

(



SELECT *,
       NEXT_MILES_PER_HOUR - MILES_PER_HOUR AS SPEED_DIFFERENCE,
       TIMESTAMPDIFF(second,timestamp,Next_timestamp) AS TIMESTAMP_DIFFERENCE
       
FROM

(

SELECT *, 
       TO_TIME (DATE_AND_HOUR) AS HOUR,
       LEAD(TIMESTAMP)OVER (PARTITION BY VIN ORDER BY TIMESTAMP) AS NEXT_TIMESTAMP,
       LEAD(MILES_PER_HOUR)OVER (PARTITION BY REG ORDER BY TIMESTAMP) AS NEXT_MILES_PER_HOUR

FROM

(

SELECT Reg, 
       TIMESTAMP,
       Miles_per_hour
       TO_DATE (TIMESTAMP) AS DATE,
       TO_TIME (TIMESTAMP) AS TIME,
       date_trunc('HOUR', TIMESTAMP) as DATE_AND_Hour,
       DATA
       
FROM Motorycle_Data_Refurbished_Models_DuPage_County

)
)
)
)

最佳答案

要为每个分区获取单个值,应删除 ORDER BY,因为它将函数切换为累积函数:

SELECT *,
       STDDEV(ACCELERATION)OVER(PARTITION BY REG, DATE, HOUR)
...

示例:

CREATE  OR REPLACE TABLE t(i INTEGER);
INSERT INTO t (i) VALUES  (6), (10), (14);

SELECT STDDEV(i) OVER(ORDER BY i) FROM t;

输出:

enter image description here

对比

SELECT STDDEV(i) OVER() FROM t;

输出:

enter image description here


应用于 STDDEV 时的 ORDER BY :

If the OVER clause contains an ORDER BY subclause, then:

A window frame is required. If no window frame is specified explicitly, then the ORDER BY implies a cumulative window frame:

   RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

窗口正在从分区的开头移动到当前行。

可以覆盖它:

SELECT STDDEV(i) OVER(ORDER BY i 
                      RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) 
FROM t;

输出:

enter image description here

关于sql - Snowflake 中的 STDDEV Windows 函数 : not getting a uniform value according to the partition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72716722/

相关文章:

sql - 如何将数组存储在 SQL 表中?

sql - 从 Snowflake 中的字符串中删除变音符号

snowflake-cloud-data-platform - 雪花从 S3 复制到表中

python - splinter 的达格试图将 Airflow 连接到雪花

Java,将传入附件与数据库中的图像列表进行比较,看看是否相同

mysql - 如何使用 Python 或 SQL 中的联接或任何其他操作合并两个数据集/表

python - 基于从 API 端点推断的字段类型自动创建 SnowFlake 表的方法? (Python)

time-series - 我可以将时间序列数据存储在数据仓库中吗?

sql - Apache Dbutils 在更新 Sql 中更改列名

SQL 获取 10 个最大的数字