【问题标题】:Lag/lead partition by and order by alternatives in Clickhouse在 Clickhouse 中按备选方案进行滞后/领先分区和排序
【发布时间】:2022-01-10 02:43:28
【问题描述】:

我有一个如下所示的表格:

对于每一行,我想为相同的 trans_type、channel 和 country 计算前面的 event_date Gross_sum 值。新的数据片段:

channel="Affiliate", country="CA" and trans_type="conversion" 

应该是这样的:

event_date   trans_type  channel   country gross_sum  prev
'2021-12-02' conversion  AFFILIATE CA      120        100
'2021-12-01' conversion  AFFILIATE CA      100        900
'2021-11-30' conversion  AFFILIATE CA      900        800

也就是说,我要执行标准的滞后功能,我现在无法使用:

select lag(gross_sum) over(partition by event_date, trans_type, channel, country order by event_date desc) from table

我需要一个聚合函数,例如数组函数但不是邻居函数!邻居或类似的非聚合函数不能很好地处理分组变量。我需要聚合,以便将来我可以从表中删除 trans_type、channel、country 列,并查看每个日期的 sum(gross_sum) 及其前面的值。

感谢您的帮助!

【问题讨论】:

标签: sql clickhouse


【解决方案1】:
SELECT
    (g.1).1 AS event_date,
    t,
    ch,
    cn,
    (g.2).2 AS prev,
    s AS gross_sum
FROM
(
    SELECT
        t,
        ch,
        cn,
        arrayMap((z, w) -> (z, w), arraySort(i -> (i.1), groupArray((d, s))) AS x, arrayPushFront(arrayPopBack(x), (toDate(0), 0))) AS ga,
        arrayCumSum(x.2) AS ss
    FROM tx
    GROUP BY
        t,
        ch,
        cn
)
ARRAY JOIN
    ga AS g,
    ss AS s
ORDER BY
    t ASC,
    ch ASC,
    cn ASC,
    event_date ASC

Query id: b4316e1b-97f0-478e-9c8f-a09cc88a0c5f

┌─event_date─┬─t──────────┬─ch────────┬─cn─┬───prev─┬──────────gross_sum─┐
│ 2020-11-08 │ conversion │ DIRECT    │ ZM │      0 │              44.77 │
│ 2020-11-10 │ conversion │ DIRECT    │ ZM │  44.77 │              89.06 │
│ 2021-02-18 │ conversion │ DIRECT    │ ZM │  44.29 │             139.05 │
│ 2021-01-03 │ conversion │ MEDIA-CPA │ ZA │      0 │              49.99 │
│ 2021-06-15 │ conversion │ MEDIA-CPA │ ZA │  49.99 │              99.98 │
│ 2020-08-25 │ conversion │ ORGANIC   │ ZA │      0 │              49.99 │
│ 2020-09-09 │ conversion │ ORGANIC   │ ZA │  49.99 │              89.98 │
│ 2021-02-20 │ conversion │ ORGANIC   │ ZA │  39.99 │             139.97 │
│ 2021-05-30 │ conversion │ ORGANIC   │ ZA │  49.99 │             189.96 │
│ 2021-08-27 │ conversion │ ORGANIC   │ ZA │  49.99 │ 249.95000000000002 │
│ 2020-07-14 │ conversion │ TUBES     │ ZA │      0 │              49.99 │
│ 2020-09-08 │ conversion │ TUBES     │ ZA │  49.99 │              89.98 │
│ 2020-11-07 │ conversion │ TUBES     │ ZA │  39.99 │             142.51 │
│ 2021-07-18 │ conversion │ TUBES     │ ZA │  52.53 │             187.87 │
│ 2021-07-26 │ conversion │ TUBES     │ ZA │  45.36 │             232.06 │
│ 2021-09-24 │ conversion │ TUBES     │ ZA │  44.19 │             282.06 │
│ 2021-09-27 │ conversion │ TUBES     │ ZA │     50 │             326.23 │
│ 2021-09-29 │ conversion │ TUBES     │ ZA │  44.17 │             369.89 │
│ 2021-11-16 │ conversion │ TUBES     │ ZA │  43.66 │             392.53 │
│ 2020-11-05 │ initial    │ DIRECT    │ ZM │      0 │              89.94 │
│ 2021-12-02 │ initial    │ MEDIA-CPA │ ZA │      0 │              39.99 │


create table tx(d Date, t String, ch String, cn String, s Float64, z Float64, z1 Float64) Engine=Memory;

INSERT INTO tx VALUES ('2021-10-17', 'trial', 'MEDIA', 'ZW', 3, 3, 0)
('2021-10-28', 'trial', 'AFFILIATE', 'ZW', 0.99, 0.99, 0)
('2021-11-16', 'trial', 'TUBES', 'ZM', 2.91, 2.91, 0)
('2020-09-30', 'trial', 'ORGANIC', 'ZM', 2, 2, 0)
('2020-09-30', 'rebill', 'ORGANIC', 'ZM', 1.98, 1.98, 0)
('2020-09-30', 'initial', 'ORGANIC', 'ZM', 90.94999999999999, 90.94999999999999, 0)
('2021-02-18', 'trial', 'DIRECT', 'ZM', 3.0300000000000002, 3.0300000000000002, 0)
('2020-11-05', 'trial', 'DIRECT', 'ZM', 2.04, 2.04, 0)
('2020-11-05', 'initial', 'DIRECT', 'ZM', 89.94, 89.94, 0)
('2021-02-18', 'conversion', 'DIRECT', 'ZM', 49.99, 49.99, 0)
('2020-11-10', 'conversion', 'DIRECT', 'ZM', 44.29, 44.29, 0)
('2020-11-08', 'conversion', 'DIRECT', 'ZM', 44.77, 44.77, 0)
('2020-09-24', 'trial', 'AFFILIATE', 'ZM', 3, 3, 0)
('2021-06-08', 'trial', 'UTM_SPOTS', 'ZA', 3.09, 3.09, 0)
('2021-11-17', 'trial', 'TUBES', 'ZA', 0.96, 0.96, 0)
('2021-11-14', 'trial', 'TUBES', 'ZA', 2.94, 2.94, 0)
('2021-09-24', 'trial', 'TUBES', 'ZA', 3.06, 3.06, 0)
('2021-07-27', 'trial', 'TUBES', 'ZA', 2, 2, 0)
('2021-07-15', 'trial', 'TUBES', 'ZA', 2.06, 2.06, 0)
('2021-06-10', 'trial', 'TUBES', 'ZA', 1, 1, 0)
('2020-10-20', 'trial', 'TUBES', 'ZA', 2.91, 2.91, 0)
('2020-10-02', 'trial', 'TUBES', 'ZA', 3.06, 3.06, 0)
('2020-09-04', 'trial', 'TUBES', 'ZA', 2, 2, 0)
('2020-07-31', 'trial', 'TUBES', 'ZA', 1, 1, 0)
('2020-07-26', 'trial', 'TUBES', 'ZA', 3, 3, 0)
('2020-07-14', 'trial', 'TUBES', 'ZA', 1, 1, 0)
('2021-11-27', 'rebill', 'TUBES', 'ZA', 40.62, 40.62, 0)
('2021-11-24', 'rebill', 'TUBES', 'ZA', 46.15, 46.15, 0)
('2021-11-03', 'rebill', 'TUBES', 'ZA', 42.73, 42.73, 0)
('2021-10-27', 'rebill', 'TUBES', 'ZA', 44.4, 44.4, 0)
('2021-10-25', 'rebill', 'TUBES', 'ZA', 44.17, 44.17, 0)
('2021-10-24', 'rebill', 'TUBES', 'ZA', 49.29, 49.29, 0)
('2021-10-18', 'rebill', 'TUBES', 'ZA', 45.13, 45.13, 0)
('2021-09-25', 'rebill', 'TUBES', 'ZA', 43.77, 43.77, 0)
('2021-09-18', 'rebill', 'TUBES', 'ZA', 44.52, 44.52, 0)
('2021-08-25', 'rebill', 'TUBES', 'ZA', 43.76, 43.76, 0)
('2021-08-18', 'rebill', 'TUBES', 'ZA', 43.81, 43.81, 0)
('2020-11-11', 'rebill', 'TUBES', 'ZA', 49.99, 49.99, 0)
('2020-10-12', 'rebill', 'TUBES', 'ZA', 49.99, 49.99, 0)
('2020-09-12', 'rebill', 'TUBES', 'ZA', 49.99, 49.99, 0)
('2020-08-13', 'rebill', 'TUBES', 'ZA', 49.99, 49.99, 0)
('2021-08-30', 'initial', 'TUBES', 'ZA', 102.93, 102.93, 0)
('2021-07-27', 'initial', 'TUBES', 'ZA', 14.99, 14.99, 0)
('2021-07-15', 'initial', 'TUBES', 'ZA', 155.89, 155.89, 0)
('2020-09-04', 'initial', 'TUBES', 'ZA', 14.99, 14.99, 0)
('2021-11-16', 'conversion', 'TUBES', 'ZA', 22.64, 22.64, 0)
('2021-09-29', 'conversion', 'TUBES', 'ZA', 43.66, 43.66, 0)
('2021-09-27', 'conversion', 'TUBES', 'ZA', 44.17, 44.17, 0)
('2021-09-24', 'conversion', 'TUBES', 'ZA', 50, 50, 0)
('2021-07-26', 'conversion', 'TUBES', 'ZA', 44.19, 44.19, 0)
('2021-07-18', 'conversion', 'TUBES', 'ZA', 45.36, 45.36, 0)
('2020-11-07', 'conversion', 'TUBES', 'ZA', 52.53, 52.53, 0)
('2020-09-08', 'conversion', 'TUBES', 'ZA', 39.99, 39.99, 0)
('2020-07-14', 'conversion', 'TUBES', 'ZA', 49.99, 49.99, 0)
('2021-10-15', 'trial', 'ORGANIC', 'ZA', 3.0300000000000002, 3.0300000000000002, 0)
('2021-09-27', 'trial', 'ORGANIC', 'ZA', 1, 1, 0)
('2021-08-27', 'trial', 'ORGANIC', 'ZA', 3, 3, 0)
('2021-05-30', 'trial', 'ORGANIC', 'ZA', 3, 3, 0)
('2021-04-14', 'trial', 'ORGANIC', 'ZA', 3.09, 3.09, 0)
('2021-02-19', 'trial', 'ORGANIC', 'ZA', 3, 3, 0)
('2021-02-18', 'trial', 'ORGANIC', 'ZA', 1, 1, 0)
('2020-12-28', 'trial', 'ORGANIC', 'ZA', 2, 2, 0)
('2020-09-24', 'trial', 'ORGANIC', 'ZA', 2, 2, 0)
('2020-08-20', 'trial', 'ORGANIC', 'ZA', 3, 3, 0)
('2020-10-09', 'rebill', 'ORGANIC', 'ZA', 39.99, 39.99, 0)
('2020-09-30', 'rebill', 'ORGANIC', 'ZA', 39.05, 39.05, 0)
('2020-12-28', 'initial', 'ORGANIC', 'ZA', 179.94, 179.94, 0)
('2020-09-16', 'initial', 'ORGANIC', 'ZA', 20.24, 20.24, 0)
('2020-08-30', 'initial', 'ORGANIC', 'ZA', 40, 40, 0)
('2021-08-27', 'conversion', 'ORGANIC', 'ZA', 59.99, 59.99, 0)
('2021-05-30', 'conversion', 'ORGANIC', 'ZA', 49.99, 49.99, 0)
('2021-02-20', 'conversion', 'ORGANIC', 'ZA', 49.99, 49.99, 0)
('2020-09-09', 'conversion', 'ORGANIC', 'ZA', 39.99, 39.99, 0)
('2020-08-25', 'conversion', 'ORGANIC', 'ZA', 49.99, 49.99, 0)
('2021-12-02', 'trial', 'MEDIA-CPA', 'ZA', 2.02, 2.02, 0)
('2021-06-15', 'trial', 'MEDIA-CPA', 'ZA', 3, 3, 0)
('2021-01-03', 'trial', 'MEDIA-CPA', 'ZA', 1.02, 1.02, 0)
('2021-12-02', 'initial', 'MEDIA-CPA', 'ZA', 39.99, 39.99, 0)
('2021-06-15', 'conversion', 'MEDIA-CPA', 'ZA', 49.99, 49.99, 0)
('2021-01-03', 'conversion', 'MEDIA-CPA', 'ZA', 49.99, 49.99, 0)
('2021-11-29', 'trial', 'MEDIA', 'ZA', 2, 2, 0)
('2021-11-10', 'trial', 'MEDIA', 'ZA', 0.99, 0.99, 0)
('2021-09-20', 'trial', 'MEDIA', 'ZA', 3, 3, 0)
('2021-09-19', 'trial', 'MEDIA', 'ZA', 3.06, 3.06, 0)
('2021-09-07', 'trial', 'MEDIA', 'ZA', 2.94, 2.94, 0)
('2021-09-01', 'trial', 'MEDIA', 'ZA', 2, 2, 0)
('2021-08-15', 'trial', 'MEDIA', 'ZA', 1.02, 1.02, 0)
('2021-08-07', 'trial', 'MEDIA', 'ZA', 3.06, 3.06, 0)
('2021-06-04', 'trial', 'MEDIA', 'ZA', 3, 3, 0)
('2021-02-25', 'trial', 'MEDIA', 'ZA', 1.02, 1.02, 0)
('2021-02-04', 'trial', 'MEDIA', 'ZA', 3, 3, 0)
('2020-10-25', 'trial', 'MEDIA', 'ZA', 0.98, 0.98, 0)
('2020-10-21', 'trial', 'MEDIA', 'ZA', 3, 3, 0)
('2020-10-02', 'trial', 'MEDIA', 'ZA', 0.97, 0.97, 0)
('2020-09-30', 'trial', 'MEDIA', 'ZA', 3, 3, 0)
('2020-09-15', 'trial', 'MEDIA', 'ZA', 1.02, 1.02, 0)
('2020-08-05', 'trial', 'MEDIA', 'ZA', 0.97, 0.97, 0)
('2020-07-21', 'trial', 'MEDIA', 'ZA', 2, 2, 0)
('2021-11-05', 'rebill', 'MEDIA', 'ZA', 48.01, 48.01, 0)
('2021-10-10', 'rebill', 'MEDIA', 'ZA', 98.23, 98.23, 0)
('2021-10-07', 'rebill', 'MEDIA', 'ZA', 50.72, 50.72, 0)
('2021-10-04', 'rebill', 'MEDIA', 'ZA', 48.53, 48.53, 0)
('2021-09-07', 'rebill', 'MEDIA', 'ZA', 50.62, 50.62, 0)
('2021-09-04', 'rebill', 'MEDIA', 'ZA', 51.01, 51.01, 0)
('2021-08-07', 'rebill', 'MEDIA', 'ZA', 50.43, 50.43, 0)
('2021-08-04', 'rebill', 'MEDIA', 'ZA', 50.8, 50.8, 0)
('2021-07-10', 'rebill', 'MEDIA', 'ZA', 97.69, 97.69, 0)
('2021-07-07', 'rebill', 'MEDIA', 'ZA', 50.51, 50.51, 0)
('2021-07-04', 'rebill', 'MEDIA', 'ZA', 51.18, 51.18, 0)
;

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多