2013-05-16 23 views
0

在我的數據庫我有這樣的條目:比較Rails中mysql的輸入簡單的方法

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 

,我需要找到至極用戶分數是最變化。這並不容易,因爲大約有3萬用戶。因此,我認爲還有比他們查詢所有和做數學題更高貴的方式

UPD:同樣的日期存儲在日期時間格式,我不知道確切的時間及存儲分數時...

+0

從第一個入口變爲最後入口最多?或最近進入最後一次輸入? –

+0

其實這兩種方式 – Dmitry

回答

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) 

如果表格很大,則最好在每個用戶記錄中緩存「更改次數」。

如果你的意思是「用最大的數字量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'; 
+0

第二個是我所需要的(「在兩個給定的日期之間由最大的數字量改變」)。但是在查詢時發生錯誤。 'ActiveRecord :: StatementInvalid:Mysql2 ::錯誤:字段列表中'列'用戶'含糊不清:' – Dmitry

+0

好吧,我糾正了我的SQL。 –

+0

亞歷克斯,可以請你改變它使用不是確切的日期,但日期的範圍,beacouse可以有一個用戶在一個日期的幾個條目。最好的情況是,SQL將在給定日期採用最新條目。可能嗎? – Dmitry

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; 
+0

我在'字段列表'中有一個錯誤'錯誤:未知列'分數':'同樣在我的表格中,每天都會存儲分數,但我想比較今天的分數和一週前的分數。 – Dmitry

相關問題