gpt4 book ai didi

sql - 尝试使用 Redshift SQL 计算累积的不同实体

转载 作者:行者123 更新时间:2023-12-04 18:08:32 24 4
gpt4 key购买 nike

我试图在一个时间序列中获得 Redshift 中不同对象的累积计数。最简单的方法是使用 COUNT(DISTINCT myfield) OVER (ORDER BY timefield DESC ROWS UNBOUNDED PRECEDING) ,但 Redshift 给出了“不支持窗口定义”错误。
例如,下面的代码试图找到从第一周到现在每周的累积不同用户。但是,我收到“不支持窗口函数”错误。

SELECT user_time.weeks_ago, 
COUNT(distinct user_time.user_id) OVER
(ORDER BY weeks_ago desc ROWS UNBOUNDED PRECEDING) as count
FROM (SELECT FLOOR(EXTRACT(DAY FROM sysdate - ev.time) / 7) AS weeks_ago,
ev.user_id as user_id
FROM events as ev
WHERE ev.action='some_user_action') as user_time
目标是构建已执行操作的唯一用户的累积时间序列。关于如何做到这一点的任何想法?

最佳答案

以下是如何将其应用于引用的示例 here ,此外,我还为“2015-01-01”添加了另一行复制“表格”以演示如何计算不同点。

该示例的作者对解决方案有误,但我只是使用他的示例。

create table public.test
(
"date" date,
item varchar(8),
measure int
)

insert into public.test
values
('2015-01-01', 'table', 12),
('2015-01-01', 'table', 120),
('2015-01-01', 'chair', 51),
('2015-01-01', 'lamp', 8),
('2015-01-02', 'table', 17),
('2015-01-02', 'chair', 72),
('2015-01-02', 'lamp', 23),
('2015-01-02', 'bed', 1),
('2015-01-02', 'dresser', 2),
('2015-01-03', 'bed', 1);

WITH x AS (
SELECT
*,
DENSE_RANK()
OVER (PARTITION BY date
ORDER BY item) AS dense_rank
FROM public.test
)
SELECT
"date",
item,
measure,
max(dense_rank)
OVER (PARTITION BY "date")
FROM x
ORDER BY 1;

CTE 为您提供每个日期每个项目的密集排名,然后主查询为您提供每个日期密集排名的最大值,即每个日期的项目的不同计数。

您需要密集排名而不是直接排名来计算不同点。

关于sql - 尝试使用 Redshift SQL 计算累积的不同实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20210902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com