2011-08-28 45 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