给定一个投票表(用户投票选择,并且必须提供一个电子邮件地址):
votes
--
id: int
choice: int
timestamp: timestamp
ip: varchar
email: varchar
考虑到他们每小时只能投票 两次 的约束,计算“唯一”投票(用户是电子邮件 + ip 的唯一组合)的最佳方法是什么?
可以计算第一次和最后一次投票之间的小时数,并确定该时间范围内允许的最大投票数,但这允许用户将他们的所有投票压缩到一个小时长的窗口中,并且仍然有他们数过了。
我意识到匿名在线投票存在固有缺陷,但我不确定如何使用 SQL 来做到这一点。我应该使用外部脚本还是其他什么? (对于每个选择,对于每个 email+ip 对,获得投票,计算下一个 +1h 时间戳,计算/丢弃/理票,继续下一个小时,等等...)
最佳答案
有点像
select email, ip, count(choice)
from votes
group by email, ip, datepart(hour, timestamp)
如果我没理解错的话
关于SQL:计算具有每小时滚动投票限制的唯一投票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71413/