3

次のようなmysqlテーブルがあります

 Speed   Lat  Lon       TimeStamp
  12      1    22    2012-02-03 00:00:05
  13      2    23    2012-02-03 00:00:10
  0       3    24    2012-02-03 00:00:15
  0       3    24    2012-02-03 00:00:20
  14      4    25    2012-02-03 00:00:25
  0       5    26    2012-02-03 00:00:30
  0       5    26    2012-02-03 00:00:35
  0       5    26    2012-02-03 00:00:40
  5       6    27    2012-02-03 00:00:45
  0       6    27    2012-02-03 00:00:50

(速度が != 0 のすべてのレコード) + (速度 == 0 の一連のレコードから 1 つのレコード) を選択する必要があります。つまり、次のようなものを期待します

 Speed  Lat1  Lat2     Timestamp
  12      1    22    2012-02-03 00:00:05
  13      2    23    2012-02-03 00:00:10
  0       3    24    2012-02-03 00:00:15
  14      4    25    2012-02-03 00:00:25
  0       5    26    2012-02-03 00:00:30
  5       6    27    2012-02-03 00:00:45
  0       6    27    2012-02-03 00:00:45

異なる列に対してdistinctとgroup byを使用しようとしました..機能していません..クエリを手伝ってください..

編集:

タイム スタンプ フィールドと、ORDER BY に使用するもう 1 つのレコードを追加しました。緯度経度でグループを使用している場合、最後のレコードは選択されません。しかし、私はそれが必要です。(問題は、車両が移動中かアイドル状態かに関係なく、別の時間に同じ緯度と経度に戻った場合です)どんな助けでも大歓迎です..

4

2 に答える 2

2

速度がゼロではないが重複する行(つまり、13、2、23 の 2 つの行)がある場合、何が必要かわかりませんか? UNION 上記の点を考慮しなくても、 DEMOを使用して期待される結果を得ることができます(fiddle の @echo_me に感謝します)。

Select Speed , lat as Lat1 , Lon as Lon1 
From Table1 where speed <> 0
UNION
Select Speed , lat as Lat1 , Lon as Lon1 
From Table1 where speed = 0
Order by lat1

または、重複したゼロ以外のレコードが必要な場合はUINON ALL、Grouped Zero records DEMOを使用できます

Select Speed , lat as Lat1 , Lon as Lon1 
From Table1 where speed <> 0
UNION ALL
Select Speed , lat as Lat1 , Lon as Lon1 
From Table1 where speed = 0
Group by speed,lat1,lon1
Order by lat1
于 2013-02-08T12:38:03.687 に答える
1

あなたはこれを試すことができます

   SELECT Speed , lat as Lat1 , Lon as Lon1 
   FROM Table1
   GROUP BY Lat

SQLデモはこちら

于 2013-02-08T12:22:57.537 に答える