4

Connectionsフォーマットのテーブルがあるとします[logID, user, time]

設定例は次のとおりです。

| 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

目的のクエリは、変更されるたびにユーザー列をグループ化し、そのユーザーによる最後のタイムスタンプを選択する必要があります。

| 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

私はGROUP BYで遊んでいますが、どこにも行きません...

4

2 に答える 2

6

1 つの方法は、ユーザー変数を使用することです。

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

sqlfiddleで参照してください。

于 2012-07-08T22:01:58.240 に答える
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;

ここで遊ぶためのフィドルです。

于 2012-07-08T22:14:15.300 に答える