2014-02-05 21 views
0

我有签入的记录,像这样的表:排序两个参数

userID  checkin_date 
    1 '2014-01-28 08:00:00' 
    1 '2014-01-27 09:10:00' 
    1 '2014-01-26 12:24:00' 
    2 '2014-01-26 08:17:00' 
    3 '2014-01-26 09:33:00' 
    2 '2014-01-28 10:28:00' 
    ..   ......... 

,我想有一个请求排序谁签以来最具体的日期(以便通过NB介绍浏览DESC)的十个用户(这很容易),但对于每一个我也想知道他们上次签入的日期。

我做这样的事情:

SELECT 
    userID, 
    count(*) as nbVisit, 
    checkin_date 
FROM(
SELECT 
userID, 
checkin_date 
FROM checkin_table 
WHERE checkin_date > '2014-01-25' 
ORDER BY checkin_date DESC)as sub 
GROUP BY userID 
ORDER BY nbVisit DESC 
LIMIT 10 

是做到这一点的最好方法是什么?它会随时工作吗?对大量数据有效吗?

SQLFIDDLE

回答

2

你并不需要为这个子查询,只需使用max()count(*)一起:

SELECT userID, max(checkin_date), count(*) as nbVisit, 
    FROM checkin_table 
    WHERE checkin_date > '2014-01-25' 
    GROUP BY userId 
    ORDER BY nbVisit desc 
    LIMIT 10 ; 
+0

完善和简单,谢谢:) – MamaWalter