Sql 使用每日和每周平均值计算前10个关注的URL
我在具有以下属性的表中存储了一长串URL监视历史记录: 时间戳:观看广告的时间戳 类别:URL类别,字符串,如“主页”、“图像”等 URL:URL 持续时间:为URL提供服务所用的时间 每个URL都有多个记录 我需要拿出一个输出,列出每个类别中最受关注的10个URL的以下内容:Sql 使用每日和每周平均值计算前10个关注的URL,sql,postgresql,Sql,Postgresql,我在具有以下属性的表中存储了一长串URL监视历史记录: 时间戳:观看广告的时间戳 类别:URL类别,字符串,如“主页”、“图像”等 URL:URL 持续时间:为URL提供服务所用的时间 每个URL都有多个记录 我需要拿出一个输出,列出每个类别中最受关注的10个URL的以下内容: URL Category Last Days Average Duration Last Weeks Average Duration 理想情况下,我不希望创建函数/触发器。我正在研究CT
URL Category Last Days Average Duration Last Weeks Average Duration
理想情况下,我不希望创建函数/触发器。我正在研究CTE和分组集
一些样本数据是:
2017-03-01,'Home','www.url.com/home.php',50
2017-03-03,'Images','www.img.com/image.jpg',70
2017-03-01,'Home','www.net.com/home.php',60
2017-03-10,'Home','www.url.com/home.php',50
样本输出可以是:
排名前10位的URL包括类别、最后一天和上周的平均值考虑使用
densite\u RANK()
窗口函数按持续时间对类别进行降序排序。顺便说一下,这是一个非常常见的SQL问题,即使有自己的标记
您的问题,并添加一些样本数据和基于该数据的预期输出。请
SELECT main.*
FROM
(SELECT t.Timestamp, t.Category, t.URL, t.Duration,
DENSE_RANK() OVER(PARTITION BY t.Category ORDER BY t.Duration DESC) AS 'Rank'
FROM myTable t) AS main
WHERE main.Rank <= 10
SELECT main.*
FROM
(SELECT t.Timestamp, t.Category, t.URL, t.Duration,
(SELECT Count(*) FROM mytable sub
WHERE sub.Category = t.Category AND sub.Duration >= t.Duration) AS Rank
FROM myTable t) AS main
WHERE main.Rank <= 10