在我的数据库中,我有以下条目:
username score date
User1 10 1/1/2013
User2 4 1/1/2013
User3 4 1/1/2013
User4 5 1/1/2013
...
User1 1 10/1/2013
User2 3 10/1/2013
User3 4 10/1/2013
User4 17 10/1/2013
我需要找到最多用户得分。这并不容易,因为有大约30,000用户。所以我认为有更多的方法比查询它们并做数学
UPD:此外,日期以日期时间格式存储,我不知道存储得分的确切时间......
答案 0 :(得分:0)
如果“改变了最多”,你的意思是“改变了最多次”,那么SQL将是这样的:
SELECT username, COUNT(*) as times_changed FROM table_name GROUP BY username ORDER BY times_changed DESC LIMIT 1;
您可以使用以下命令运行:
result = ActiveRecord::Base.connection.execute(sql)
如果表格很大,最好在每个用户记录中缓存“更改次数”。
如果您的意思是“更改了两个给定日期之间的最大数字量”,那么SQL将如下所示:
SELECT t1.username, ABS(t1.score - t2.score) AS difference FROM table_name AS t1 JOIN table_name AS t2 WHERE t1.username = t2.username AND t1.date = 'date here' AND t2.date = 'other date here';
答案 1 :(得分:0)
假设,为了获得在该表格布局中具有最大分数差异的用户:
Select username, max(score)
from (
select C1.username, abs(C1.score - C2.score) score from table_name C1, table_name C2
where C1.username = C2.username and C1.score <> C2.score
) as T;