首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询以查找随时间增长的增长

查询以查找随时间增长的增长
EN

Stack Overflow用户
提问于 2016-03-21 18:45:11
回答 1查看 62关注 0票数 2

我有一个stats_by_dates表,其中包含每天为一首歌测量的分数。我怎样才能找到得分增长最快的歌曲呢?

这个表中的列是:idsong_iddatescore

到目前为止,这就是我所拥有的,但它并不安静,对吧:

代码语言:javascript
复制
select song_id, date, score - coalesce(lag(score) over (partition by song_id order by date desc), 0) as delta
from stats_by_dates
group by song_id, date, score
order by score desc limit 100

这是返回前100首歌曲按乐谱,而不是前100首歌曲的最高增长的歌曲。一旦我做到了这一点,我还想应用这个查询来找到过去3天中上升最快的歌曲。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 03:45:07

如果我说得对,你需要得到一首歌的第一个分数和最后一个分数,并计算差值(delta),这将代表随着时间的推移,这个分数是如何变化的。

试试这个:

代码语言:javascript
复制
SELECT DISTINCT 
    song_id, 
    -- the first score of a song
    first_value(score) OVER (PARTITION BY song_id ORDER BY date ASC) as first_score, 
    -- the last score of a song
    first_value(score) OVER (PARTITION BY song_id ORDER BY date DESC) as last_score,
    -- the difference (delta) between the first and the last scores
    (first_value(score) OVER (PARTITION BY song_id ORDER BY date DESC) - first_value(score) OVER (PARTITION BY song_id ORDER BY date ASC)) as delta
FROM stats_by_dates
WHERE date > now() - INTERVAL '3 day' -- get score for the last 3 days
ORDER BY delta DESC LIMIT 100
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36139175

复制
相关文章

相似问题

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