2012-07-08 84 views
4

说我有一个表Connections与格式[logID, user, time]MySQL的:组值

一个例子集是:

| logID | user | time 
|----------------------- 
| 91 | terry | 12:55:00 <--- Last by user 
| 90 | terry | 12:54:26 
| 89 | nami | 12:52:12 <--- Last by user 
| 88 | terry | 12:50:50 <--- Last by user 
| 87 | terry | 12:49:21 
| 86 | terry | 12:48:16 
| 85 | terry | 12:46:07 
| 84 | nami | 12:31:22 <--- Last by user 
| 83 | nami | 12:30:30 
| 82 | nami | 12:29:26 
| 81 | terry | 12:27:12 <--- Last by user 

所需的查询应该GROUP每当它改变了用户列选择最后该用户的时间戳

| logID | user | time 
|----------------------- 
| 91 | terry | 12:55:00 <--- Last by user 
| 89 | nami | 12:52:12 <--- Last by user 
| 88 | terry | 12:50:50 <--- Last by user 
| 84 | nami | 12:31:22 <--- Last by user 
| 81 | terry | 12:27:12 <--- Last by user 

我已将蜜蜂n,其中GROUP BY玩耍,但没有得到任何地方...

+0

logID分配中是否有空隙?我的意思是,我们可以总是说logID = n _always_行的前一行有logID = n - 1吗? – raina77ow 2012-07-08 22:06:19

+0

抱歉,没有看到此评论 - 答案是肯定的 – tetris11 2012-07-08 22:51:24

回答

6

一种方法是使用用户变量:

SELECT logID, @lastuser:=user AS user, time 
FROM  mytable, (SELECT @lastuser:=NULL) init 
HAVING NOT @lastuser<=>user 
ORDER BY time DESC 

见它sqlfiddle

+0

+1,因为此答案根本不需要无间隙的logID列。 )虽然可能会慢一点? – raina77ow 2012-07-08 22:20:01

+0

选择紧凑的答案 – tetris11 2012-07-08 22:21:10

4

假设没有这样的差距,可以使用的东西...

SELECT a.logID, a.user, a.time 
     FROM Connections a 
LEFT JOIN Connections b ON b.logID = a.logID + 1 
    WHERE a.user <> b.user 
     OR b.user IS NULL 
    ORDER BY a.logID desc; 

这里有一个fiddle一起玩。

+0

+1这样一个美丽的小提琴! – tetris11 2012-07-08 22:18:06