2015-09-30 176 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 完美地工作!我不知道我可以這樣排序。非常感謝!!!! –