2013-07-10 90 views
1

我有两个表:聚合函数冲突

users: 
___________________________ 
|user_id  | username | 
|_______________|___________| 
| 1   | Dolly | 
| 2   | Didi  | 
|_______________|___________| 

forum: 
_____________________________________________________________ 
|match_static_id| comment | timpstamp   | user_id | 
|_______________|___________|______________________|__________| 
| 1   | Hi  | 2013-07-10 12:15:03 |  2 | 
| 1   | Hello | 2013-07-09 12:14:44 |  1 | 
|_______________|___________|______________________|__________| 

此查询工作正常,它使用只是THW forum表:

SELECT forum.match_static_id, 
count(forum.match_static_id) 'comments_no', max(forum.timestamp)'timestamp' 
FROM forum 
GROUP BY forum.match_static_id 
Order BY timestamp DESC 

但是,下面的查询使用两个表:

SELECT forum.match_static_id, 
count(forum.match_static_id) 'comments_no', max(forum.timestamp)'timestamp', users.username 
FROM forum 
INNER JOIN users on users.id = forum.user_id 
GROUP BY forum.match_static_id 

在这里我想得到的最大用户(时间戳),但我得到了错误的用户可以任何身体给我一个线索,请吗? ORDER BY的时间戳降序

+1

你想的'MAX(时间戳)'的foreach'match_static_id '或什么?那么'users.username'你想为每个分组的'match_static_id'选择哪个用户名呢? –

+0

我想要max(timestamp)的注释的用户名 – Basel

+1

这是一个常见问题 – Strawberry

回答

3

试试这个:

SELECT f1.match_static_id, 
    f2.comments_no, 
    f2.maxtimestamp, 
    users.username 
FROM forum AS f1 
INNER JOIN 
(
    SELECT match_static_id, 
    max(timestamp) maxtimestamp, 
    count(comment) AS comments_no 
    FROM Forum 
    GROUP BY match_static_id 
) AS f2 ON f1.match_static_id = f2.match_static_id 
     AND f1.timestamp = f2.maxtimestamp 
INNER JOIN users on users.user_id = f1.user_id; 

看到它在这里的行动:

+0

但是,如果你看到演示的comment_no字段给1它应该是2.我需要max timestamp的用户,但我也想comment_no不受影响 – Basel

+0

@BaselShbeb - 啊哈,好的抱歉,请参阅我的编辑。从内部查询中选择它。 –