【发布时间】:2021-03-18 02:18:06
【问题描述】:
我有一张这样的桌子:
我想为每个 user_key 获取每个日期/月/工作日/周的 top total_listened
我想我需要使用窗口函数 我可以得到不同的日期格式:
MONTH(stream_date) for months
WEEKDAY(stream_date) for weekday
WEEK(stream_date) for week
我试过这个:
select
MAX(vals.total_listened_per_day) as RECORD_STREAM_DAY_TIME,
MAX(vals.total_listened_per_month) as RECORD_STREAM_MONTH_TIME,
MAX(vals.total_listened_per_week) as RECORD_STREAM_WEEK_TIME,
MAX(vals.most_active_weekday) as MOST_ACTIVE_WEEKDAY_TIME
last_value(days.date) over (partition by user_key order by days.total_listened) as RECORD_STREAMDAY,
from
(
select user_key, stream_date as date,
sum(st.length_listened) over (partition by user_key, stream_date) as total_listened_per_day,
sum(st.length_listened) over (partition by user_key, MONTH(stream_date)) as total_listened_per_month,
sum(st.length_listened) over (partition by user_key, WEEK(stream_date)) as total_listened_per_week,
sum(st.length_listened) over (partition by user_key, DAYNAME(stream_date)) as most_active_weekday
group by 1,2
.....
)
用于获取金额(以_TIME为结尾的变量),但不适用于获取特定的日期/月份....(末尾没有_TIME的变量,例如RECORD_STREAMDAY),这是因为group by ,它是按 stream_date 而不是按 month(stream_date) 分组的,例如,我不知道如何在没有 doin 子查询的情况下做到这一点
【问题讨论】:
标签: sql datetime greatest-n-per-group snowflake-cloud-data-platform window-functions