源表数据如下:

timeprovinceorder_cnt
20200601shandong100
20200601jiangsu200
20200601zhejiang300
20200602shandong200
20200602jiangsu300
20200602zhejiang400
20200603shandong400
20200603jiangsu500
20200603zhejiang600

需求是按照省份和时间分类,每天累计求和,需求的结果如下:
(每天的数据都要按照省份将之前的订单数目进行累加)

timeprovinceorder_cnt_sum
20200601shandong100
20200601jiangsu200
20200601zhejiang300
20200602shandong300
20200602jiangsu500
20200602zhejiang700
20200603shandong700
20200603jiangsu1000
20200603zhejiang1300

需要借助clickhouse的array系列函数实现: ArrayFunction

SELECT
    time,
    province,
    arraySum(arraySlice(order_cnts, 1, i)) AS order_cnt_sum  
FROM
(
    SELECT groupArray(order_cnt) AS order_cnts,
           groupArray(time) AS times,
           groupArray(province) AS provinces
    FROM
    (
        SELECT *
        FROM test_table order by time
    ) group by province
)
ARRAY JOIN
    times as time,
    provinces AS province,
    arrayEnumerate(order_cnts) AS i;

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐