0

在我的数据库中,我有如下条目:

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

我需要找到最多的用户分数变化。这并不容易,因为大约有 30k 用户。所以我认为有比全部查询并做数学更优雅的方法

UPD:日期也以日期时间格式存储,我不知道存储分数的确切时间......

4

2 回答 2

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;
于 2013-05-16T20:05:12.990 回答
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)

如果表很大,最好在每条User记录中缓存“更改次数”。

如果您的意思是“在 2 个给定日期之间更改了最大数值”,那么 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';
于 2013-05-16T19:55:47.240 回答