SQL: first_value(), 获取视频的 min_date

Posted

技术标签:

【中文标题】SQL: first_value(), 获取视频的 min_date【英文标题】:SQL: first_value (), getting the min_date for a video 【发布时间】:2020-01-24 18:15:22 【问题描述】:

星期五快乐:

我有一个名为 view_date 的列。此日期的最小值是视频首次放入特定播放列表的日期。

在我试图得到的同一个查询中;

    播放列表名称, 视频名称, min_view_date/ 每个视频/每个播放列表(视频何时添加到 具体的播放列表) view_date(我们稍后有一个过滤器 在 Where 子句中) 特定视图的总和 查看日期。

我希望使用窗口函数来获取 min_view_date。 这是我到目前为止所做的。

Select playlist_name, video_name, 
     first_value (video_name) over(partition by playlist_name order by view_date asc ROWS UNBOUNDED 
     PRECEDING) as min_view_date,
     view_date
     sum(views) as total_views
From t1
Where view_date > '01-Jan-2020'

这些查询存在许多问题:第一个值窗口函数使播放列表中的一个曲目的最小值对于播放列表的所有曲目保持相同。但是,我需要每个播放列表中每个曲目的实际唯一值。 此外,Where 过滤器限制了我的 min_dates 值。 min_date 可能是 2016 年。

示例结果: Playlist_name:'A' .....video_name:'AHty'...... min_view_date = '1-Feb-2017 ' ...... view_date='7-Jan-2020' ..... total_views=1500

我使用 Amazon Redshift

有什么建议吗? 谢谢

【问题讨论】:

样本数据和期望的结果会有所帮助。 【参考方案1】:

如果我理解正确,你想混合聚合函数和窗口函数:

select playlist_name, video_name, 
       min(view_date) as min_view_date,
       min(min(view_date)) over (partition by playlist_name order by view_date asc rows unbounded preceding) as min_view_date,
     view_date
     sum(views) as total_views
from t1
where view_date > '2020-01-01'
group by playlist_name, video_name, view_date;

first_value() 在这里似乎没有用。

【讨论】:

我现在正在尝试你的方法。有关示例结果,请参见上文。谢谢

以上是关于SQL: first_value(), 获取视频的 min_date的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如何将 first_value 忽略为聚合?

如何获取 SQL 中的第一个非 NULL 值?

SQL first_value() 按特定日期部分

SQL Server ->> FIRST_VALUE和LAST_VALUE函数

sql SQL Server 2012 TSQL新函数LAG,LEAD,FIRST_VALUE和LAST_VALUE

snowflake-sql:min vs first_value windows函数的情况