2016-08-16 77 views
0

我想排名的结果,首先根据总数,但我需要根据最后一次入境日期打破关系。以下是我有用于排名的查询,但不处理关系。排名来自MySql的结果

SELECT @rownum := @rownum +1 AS rank, total, user_id 
FROM (
    SELECT sum(score) AS total, user_id 
    FROM submissions 
    WHERE group_id = $group_id 
    AND status = 1"; 
    GROUP BY user_id 
     ORDER BY total DESC 
) T, (
    SELECT @rownum :=0 
) a 

这将返回以下

rank | total | user_id 
    1 | 90 | 1366 
    2 | 89 |  756 
    3 | 89 | 1026 
    4 | 89 | 1987 

我需要的是另一个子查询来获取每个用户提交(或至少在过去的提交),并使其通过最早date_submitted排名。

+0

提供样品数据和预期的结果。 –

回答

2

每个用户的最后一次提交的可能会拥有最新的(最大)日期,因此你可以使用max()函数在子查询中检索它:

SELECT @rownum := @rownum +1 AS rank, total, user_id 
FROM (
    SELECT sum(score) AS total, max(your_date_field) as last_submission_time, user_id 
    FROM submissions 
    WHERE group_id = $group_id 
    AND status = 1"; 
    GROUP BY user_id 
     ORDER BY total DESC, last_submission_time ASC 
) T, (
    SELECT @rownum :=0 
) a 
+0

完美地工作,谢谢! – Judson