【问题标题】:MySQL remove duplicated row data on SELECTMySQL 删除 SELECT 上的重复行数据
【发布时间】:2011-08-08 08:52:07
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你还有其他字段吗?
  • 如果你给出完整的表结构将会很有用,基于一列很难回答你。
  • 数据库中的表没有继承顺序的概念。根据定义,它们是一组无序的行。您必须提供一些其他信息 A:唯一标识每个实例,B:提供值的顺序。

标签: mysql select duplicate-data


【解决方案1】:

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

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

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

为了检查下一行是否与字段速度的值相同,您可以只使用 LEFT 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);

【讨论】:

  • 是的,我的数据是正确的,我想要的结果也是正确的......我用它来绘制图表,通过丢弃重复的数据来减少节点是好的
  • 也许术语“重复”在数据库中的数据方面有点过载。在澄清之后,我改变了我原来的答案。试试看!
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2018-04-19
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多