sum() over(partition by order by row between ... )

Raw data
Here Insert Picture Description

SELECT NAME,
       p_date,
       cost,
       sum(cost) over() AS sample1, --所有行相加
       sum(cost) over(PARTITION BY NAME) AS sample2,--按name分组,组内所有行相加
       sum(cost) over(PARTITION BY NAME ORDER BY p_date) AS sample3,--按name分组,组内按日期累加(有相同日期也累加)
       sum(cost) over(PARTITION BY NAME ORDER BY p_date,cost) AS sample8,--按name分组,组内按顺序累加
       sum(cost) over(PARTITION BY NAME ORDER BY p_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sample4,--和sample3一样,由起点到当前行的聚合
       sum(cost) over(PARTITION BY NAME ORDER BY p_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS sample5,--前面一行和当前行做聚合
       sum(cost) over(PARTITION BY NAME ORDER BY p_date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS sample6,--前面一行和后面一行做聚合
       sum(cost) over(PARTITION BY NAME ORDER BY p_date ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS sample7 --当前行和后面所有行
FROM tmp_export.test123


Note that the data of the red line, the same date
Here Insert Picture Description

Published 175 original articles · won praise 76 · Views 230,000 +

Guess you like

Origin blog.csdn.net/qq_29232943/article/details/103634546