在mysql中删除基于旧日期的重复项

时间:2012-11-07 23:24:32

标签: mysql

想象一下......一个人将关于计算机的一行数据添加到mysql中,并且他再次添加另一行基本相同的数据行,除了日期不同,其中每个日期总是用插入标记。

我希望能够消除重复项并仅显示最近的行。

假设我们有一个包含3个字段的“计算机”表:ID,COM​​PUTER,DATEADD

表中的

就像这样

1, dell, 2010-10-09
2, dell, 2011-10-10
3, gateway, 2010-03-03
4, dell, 2010-02-02

简单,好吧......我如何摆脱戴尔的重复并且只获得最新约会的戴尔?

我尝试了这个查询:

 SELECT * 
  FROM  `computers` 
  GROUP BY computer
  ORDER BY dates ASC 

它没有按照我的预期执行 - 日期不是最新的。

2 个答案:

答案 0 :(得分:0)

每条评论修订

SELECT * FROM
computers
INNER JOIN
(SELECT computer, MAX(dates) as dates
FROM computers
GROUP BY computer) AS max_dates ON computers.computer = max_dates.computer AND computers.dates = max_dates.dates

或者您可以更改表结构以在计算机字段上具有唯一索引,然后将所有数据插入作为REPLACE INTO查询,这样您就不会有重复项,如果您不关心历史记录条目。

答案 1 :(得分:0)

使用DESC代替ASC

SELECT * 
FROM  `computers` 
GROUP BY computer
ORDER BY dateadd DESC;

更新1

另一个镜头:

SELECT *
  FROM computers c
 WHERE dateadd = (SELECT MAX(dateadd) 
                    FROM computers 
                   WHERE computer = c.computer)

但如果一个日期的同一台计算机有两个或更多条目,则可能会出现一些问题。