Допустим, у меня есть таблица улья, которая имеет 3 строки: merchant_id, week_id, acc_id. Моя цель - собирать уникальных клиентов в предыдущие 4 недели для каждой недели, и я использую для этого скользящее окно.
Мои коды:
создать тестовую таблицу:
CREATE TABLE table_test_test (merchant_id INT, week_id INT, acc_id INT);
INSERT INTO TABLE table_test_test VALUES
(1,0,8),
(1,0,9),
(1,0,10),
(1,2,1),
(1,2,2),
(1,2,4),
(1,4,1),
(1,4,3),
(1,4,4),
(1,5,1),
(1,5,3),
(1,5,5),
(1,6,1),
(1,6,5),
(1,6,6)
Тогда соберите:
select
merchant_id,
week_id,
collect_set(acc_id) over (partition by merchant_id ORDER BY week_id RANGE BETWEEN 4 preceding AND 0 preceding) as uniq_accs_prev_4_weeks
from
table_test_test
Таблица результатов:
merchant_id week_id uniq_accs_prev_4_weeks
1 1 0 []
2 1 0 []
3 1 0 []
4 1 2 [9,8,10]
5 1 2 [9,8,10]
6 1 2 [9,8,10]
7 1 4 [9,8,10,1,2,4]
8 1 4 [9,8,10,1,2,4]
9 1 4 [9,8,10,1,2,4]
10 1 5 [1,2,4,3]
11 1 5 [1,2,4,3]
12 1 5 [1,2,4,3]
13 1 6 [1,2,4,3,5]
14 1 6 [1,2,4,3,5]
15 1 6 [1,2,4,3,5]
Как видите, в таблице есть избыточные строки. Это только пример, в моем случае эта таблица огромна, а избыточность вызывает проблемы с памятью.
Я пытался использовать различные группы, но ни одна из этих работ.
Есть ли хороший способ сделать это? Большое спасибо.