2015-09-30 136 views
0

我正在尝试为我的主页创建趋势发布数据库调用。SQL趋势数据

我认为这样做的最好方法是制作2个整数表。

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

这里是我的表看起来像,我跟踪最近10个趋势的帖子。

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。

从这个数据,我需要拉职位顺序

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 

我需要根据点击排序这些结果,只要他们在tre寻找职位。

例如:如果帖子#8的点击次数多于位置#4,它将采取点击并保持趋势的顺序,但使用点击也可以对数据进行排序。

原来的帖子将保持其位置,直到趋势帖子获得的点击次数多于占据该位置的位置。

我试图解决的问题是当我重置趋势数据。我每4小时重置一次数据,但希望保持每个趋势发布的位置和重量。


我解释得很好吗,有人可以帮我吗?

+0

看起来像你想点击我来排序。如果不是,你能否在这种情况下提供一个例子。 – pancho018

+0

我已经使用另一个格式化示例更新了原始帖子。 –

+0

可以请你添加更多的标签 - 是这个SQL服务器,MySQL,甲骨文等? – Greg

回答

2

为什么这不适合你?

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 
+0

点击+重量的好主意。我现在正在尝试这个! 我无法使用时间戳。当我这样做时,其中一些帖子将永远不会移动位置。有时在#1和#2之间有数百次点击。我希望通过重新设置帖子,可以让其他帖子有机会登顶。 –

+0

另一种方法是使用公式为每次点击分配权重,然后根据点击的年龄。就像'ClickWeight =(1/number_of_second)',那么你的趋势就是'SUM(ClickWeight)'这里真正的工作是找到一个合适的权重函数。我做了一次实时交通功能。在过去5分钟内每辆车都有相同的重量,但之后是指数衰减。这种方式最新的数据总是有更多的权重,但如果没有数据旧数据也会增加结果。 –

+0

Yea,Juan。我试图让新数据能够与旧数据竞争。 您的 的示例SELECT * FROM test ORDER BY((position + clicks)/ 2)DESC 完美地工作!我不知道我可以这样排序。非常感谢!!!! –