2

我有一个表,我想在使用 SELECT 操作时过滤掉重复的数据,表本身包含这样的数据:

|=======|
| SPEED |
|=======|
|  100  |
|  100  |
|   90  |
|   80  |
|   80  |
|  100  |
|   80  |
|=======|

我想要的是这样的,请注意订单仍然完好无损:

|=======|
| SPEED |
|=======|
|  100  |
|   90  |
|   80  |
|  100  |
|   80  |
|=======|

DISTINCT 或 GROUP BY 不起作用,因为它丢弃了所有重复的数据

为什么我需要这种数据,是因为我想使用这些数据绘制图表,通过减少节点(删除某些序列中的重复数据)图表将不那么拥挤并且渲染速度更快

4

1 回答 1

1

编辑,因为问题得到澄清。

为了归档这样的东西,你的表需要有另一列,我们称之为Id。我的测试表如下所示:

CREATE TABLE `yourtable` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Speed` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM

为了检查下一行是否可能与字段速度的值相同,那么您可以只使用 aLEFT JOIN并忽略两个值相等的所有数据。

尝试这个:

SELECT A.Id, A.Speed, B.* 
FROM yourtable AS A
LEFT JOIN yourtable AS B ON A.Id+1 = B.Id
WHERE A.Speed != B.Speed OR ISNULL(B.Speed);
于 2011-04-19T04:33:23.847 回答