2012-07-08 85 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