SQL 趋势数据

SQL Trending Data

我正在尝试为我的主页创建一个 Trending Posts 数据库调用。

我想到的最好的方法是制作 2 个整数 tables。

我遇到的问题是对这些结果进行排序。

这是我的 table 的样子,我跟踪最近 10 个趋势 post。

name         trending             clicks
post1          10                   5
post2           9                   15
post3           8                   12
post4           7                   10
post5           6                   8
post6           5                   8
post7           4                   22
post8           3                   18
post9           2                   8
post10          1                   8

趋势位置每 4 小时更新一次,点击次数重置为 0。

根据这些数据,我需要按此顺序提取 posts

name         trending             clicks
post6           5                   22
post8           3                   18
post2           9                   15
post3           8                   12
post4           7                   10
post5           6                   8
post9           2                   8
post10          1                   8
post1          10                   5

这是另一个例子:

name         trending             clicks
post1          10                   0
post5           6                   9
post2           9                   0
post3           8                   0
post4           7                   0
post6           5                   0
post7           4                   0
post10          1                   3
post8           3                   0
post9           2                   0

我需要根据点击次数对这些结果进行排序,前提是点击次数高于趋势位置。

示例:如果post #8 获得的点击次数多于位置#4,它将占据它的位置并保持趋势顺序,但使用点击次数也对数据进行排序。

最初的 post 将保持他们的位置,直到趋势 post 获得的点击次数超过取代它的位置。

我试图解决的问题是当我重置趋势数据时。我每 4 小时重置一次数据,但想保持每个趋势的位置和权重 post。


我是否解释得足够好,有人可以帮助我吗?

为什么这对你不起作用?

SELECT name, trending,  clicks
FROM YourTable 
ORDER BY clicks DESC

但是如果你想保持之前的趋势,那么你需要添加一个权重列。

SELECT name, trending, clicks, weight
FROM YourTable 
ORDER BY ((clicks + weight) /2) DESC

不是每 4 小时重置一次趋势,而是计算最后 4 小时的点击次数并不容易。您必须记录每次点击的数据时间

SELECT name, count(clicks) as clicks
FROM YourTable
WHERE datetime > DATEADD(h,-4,GETDATE())
GROUP BY name
ORDER BY count(clicks) DESC