Member
1 | |
---|---|
1 | 2007 |
1 | 2008 |
2 | 2023 |
2 | 2024 |
这个 |
campaign
pastcampaignsROW_NUMBER()
的帮助下通过自我加入方法来处理这一点:任何想法? | 我们可以在 |
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Member ORDER BY Campaign) rn
FROM yourTable
)
SELECT
t1.Member,
t1.Campaign,
LISTAGG(t2.Campaign) WITHIN GROUP (ORDER BY t2.Campaign) Pastcampaigns
FROM cte t1
INNER JOIN cte t2
ON t2.Member = t1.Member AND
t2.Campaign <= t1.Campaign
GROUP BY
t1.Member,
t1.Campaign
ORDER BY
t1.Member,
t1.Campaign;
调用为每个成员中的每个活动添加了一个序列。 然后,自结合的技巧将每一行与以前的坎皮金有关。 然后,我们通过成员和广告系列汇总以生成先前广告系列的CSV列表。 demo
演示在MySQL中,但逻辑和数据与雪花相同。
基于评论中提到的方法使用
ROW_NUMBER()
和ARRAY_AGG
.。
样本查询
ARRAY_TO_STRING
PARTITION BY member ORDER BY campaign ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)基于活动(
PARTITION BY member
)
ORDER BY campaign
)
然后,将广告系列组合到数组中,然后array_to_string将数组转换为带有逗号分离值的字符串。 输出