目标是返回具有最多星星(投票)的图像。如果有一个平局,它会被dateTime标记打破;获得最多选票的第一张图片。有3列,imageName,stars,dateTime。为了填充该表,用户使用5星评级系统投票。每个图像可以有1到5颗星,以及多种组合。该语句需要将与每个唯一imageName关联的总星数相加,然后评估dateTime标记(如果存在平局)。这是我迷路的地方。可能有4次出现一个唯一的imageName,每个都有一个1星,总共5票。另一个imageName可以出现一次,并且具有4星级的单个评级。
样本表:
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)
假设Microsoft SQL
select top 1 xx.imagName
FROM
(
select imagName,min(dt),sum(stars)
from yourTable
group by imagName
ORDER BY 3 DESC,2
) xx
其他方言有第一次出现的其他方式
答案 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
你也可以使用“平均时间戳”作为决胜局,或者使用“每颗星的平均时间戳”作为决胜局。