Mysql从系列中选择不同的值

时间:2013-02-08 11:59:17

标签: mysql sql group-by distinct

我有一个类似

的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)+(一系列记录中的一条记录,其中speed == 0)。 即我会期待像

这样的东西
 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的记录 如果我使用Lat的组,则不会选择Lon的最后一条记录。但我需要它。 (问题是如果车辆在另一个时间回到相同的纬度和经度,无论是移动还是闲置) 任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:2)

如果速度非零但重复行(即两行13,2,23),不确定您想要什么?如果不考虑上述观点,您可以使用UNION DEMO获得预期结果(感谢@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可以使用分组零记录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

答案 1 :(得分:1)

你可以试试这个

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

SQL DEMO HERE