2011-08-28 46 views
1

目標是返回最多星星(票)的圖像。如果有一條領帶,它被dateTime郵票打破;獲得最多選票的第一張圖片。有3列,imageName,星星,dateTime。爲了填充該表格,用戶使用5星級評分系統投票。每個圖像可以有1到5顆星,以及多種組合。該聲明需要將與每個唯一imageName關聯的總星星加起來,然後評估dateTime戳記(如果有的話)。這是我迷路的地方。可能有4個獨特的imageName,每個都有1個星,總共5票。另一個imageName可能會出現一次,並且只有一個四星評分。sql tally投票並返回贏家

樣品表:

imagName ----- stars ----- DT 
____________________________________________________ 
endeavourLiftOff.jpg ----- 1 ----- 2011-08-25 20:51:18 
Image0016.jpg ------- ---- 1 ----- 2011-08-25 20:53:16 
Image0016.jpg ------------ 3 ----- 2011-08-25 20:53:17 
mantas_05-06.jpg --------- 4 ----- 2011-08-25 20:53:18 
help.jpg ----------------- 3 ----- 2011-08-25 20:53:20 
txHoldem.jpg ------------- 1 ----- 2011-08-25 20:53:21 
Image0016.jpg ----------- 1 ----- 2011-08-25 20:55:37 
+0

什麼是數據庫服務器? –

回答

2

假設微軟SQL

select top 1 xx.imagName 
FROM 
(
select imagName,min(dt),sum(stars) 
from yourTable 
group by imagName 
ORDER BY 3 DESC,2 
) xx 

其他方言已經越來越第一次出現

+0

修復查看示例數據後的查詢,對不起 – Sparky

+0

在MySQL中,您將使用LIMIT 1而不是TOP 1 –

1

你所得到的評價時間戳丟失的其他方式,因爲你的要求不明確。

你想取第一個時間戳,最後一個時間戳嗎?總決賽中最早的選票是誰?

我打算假設你想在決勝者中使用最早的投票。

SELECT 
    A.* 
FROM 
    (SELECT 
    I.imagName, 
    SUM(I.stars) as StarVotes, 
    MIN(I.DT) as TieBreaker -- "Earliest Vote Tiebreaker" 
    FROM 
     MyTable as I 
    GROUP BY I.imagName) as A 
ORDER BY 
    A.StarVotes DESC, 
    A.TieBreaker 

您還可以照顧到使用「平均時間戳」爲決勝局,或「每星平均時間戳」爲決勝局。

+0

這是一個非常好的解決方案... thx。 – nullsteph