Mysql从序列中选择不同的值
我有一个类似mysql的表Mysql从序列中选择不同的值,mysql,sql,group-by,distinct,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:
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
我需要选择(speed!=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
如果我使用group by with Lat,则不会选择Lon last记录。但我需要它。
(问题是,如果车辆在另一时间返回相同的纬度和经度,无论是行驶还是怠速)
任何帮助都将不胜感激。您可以试试这个
SELECT Speed , lat as Lat1 , Lon as Lon1
FROM Table1
GROUP BY Lat
如果速度为非零但有重复行(即两行13、2、23),则不确定您想要什么?不考虑上述要点,您可以使用
联合(感谢@echo\u me的帮助)获得预期的结果
为什么DISTINCT
不起作用?通过这个例子,它将为您提供所需的结果。请给出一个DISTINCT
不起作用的示例。您能更新示例吗?DISTINCT
对给定的样本测试数据有效,但如果测试数据包括行(0,3,24)和(0,4,25)而不是(0,3,24)和(0,3,24),则不起作用。OP没有明确说明问题域。如果(人们可能会假设)这些行是连续的,并且描述了移动对象的速度和位置,那么也可以安全地假设速度为0的连续行将保持相同的位置。不过这是一个假设,如果是这样的话,那么问题就出在‘如何使这些行按正确的顺序排列’@lintu:你说你有“一系列记录”,但我看不到可用于排序的列。@ypercube。。相同值的系列(速度为0时)。。本例中有两个系列。如果它误导了你,我就错了。这几乎与表1中的选择不同的速度,lat为Lat1,Lon为Lon1相同。唯一的区别是,你的查询不会包括速度
为空的行(如果有的话)。@AndriyM:OP说他试过使用DISTINCT
和Group By
,没有看到他的所有数据,这是一种不同的方法,是的,我理解UNION
到底做了DISTINCT
所做的事情。。。
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
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