首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用重叠时间窗口计算不同的值

使用重叠时间窗口计算不同的值
EN

Stack Overflow用户
提问于 2018-05-07 21:04:19
回答 1查看 51关注 0票数 0

我在Teradata15中工作,我的数据如下所示: table1 (userid,activitydate,activitytype)

我被要求在每周六结束的30天内计算出唯一的用户。因此,psuedo代码看起来应该是:

代码语言:javascript
复制
select count(distinct(userid)
from table1 
where activitydate between Saturday and Saturday - 30

这一切都很好,但我需要每个星期六返回一个值,我需要使用交互式SQL、没有编译的UDF、过程或循环来实现这一点。

理想的结果如下:

周末大学用户

4/7/18 10000

4/14/18 15000

我读过很多关于CTE的行号和多个级别的文章,但是我无法得到我所需要的。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-07 21:12:49

您可以使用Teradata的句点数据类型和Sys_calendar.Calendar表将其组合在一起:

代码语言:javascript
复制
WITH saturdays AS (
    SELECT PERIOD(calendar_date - INTERVAL '30' DAY, NEXT(calendar_date)) AS sat_period
    FROM Sys_Calendar."CALENDAR" 
    WHERE calendar_date BETWEEN DATE '2018-01-01' AND CURRENT_DATE
        AND day_of_week = 7
)
SELECT COUNT(DISTINCT userid) count_of_users, 
    END(sat_period) AS saturday_Date
FROM yourtable
    INNER JOIN saturdays ON 
        saturdays.sat_period CONTAINS yourtable.datefield
GROUP BY saturday_date

只运行CTE本身,你就会看到那里发生了什么。我们基本上只是从当前年度的sys_calendar构建一个日期周期(根据您认为合适的情况更改该日期范围)。teradata中的句点可以达到,但不包括范围内的结束日期,因此我们使用NEXT()函数将其增加了一天。

一旦从sys_calendar表构建了句点,我们就可以将其内部连接回表并进行聚合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50222407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档