【问题标题】:MYSQL deleting duplicate values from a table that fall on a particular dateMYSQL 从表中删除特定日期的重复值
【发布时间】:2017-12-22 08:09:54
【问题描述】:

我有 mysql 表,其中包含三个字段和额外的 id 列,即 primary key

host              ipaddress      date
----              ---------      -----
server1.abc.com   10.1.1.1      2011-10-18 22:45:16
server1           10.1.1.1      2011-12-19 21:56:46
server2           11.1.1.1      2011-12-18 21:56:46
server2.abc.com   11.1.1.1      2011-12-17 21:56:46

Here,
host --> varchar
ipaddress --> varchar
date ---> datetime

我想在表中选择host,其中有ip 的重复条目 我只想在date like '2011-12-19%' 时检查主机的重复条目

从上表来看,我的结果应该满足条件date like '2011-12-19%'

host              ipaddress      date
----              ---------      -----
server1.abc.com   10.1.1.1      2011-10-18 22:45:16
server1           10.1.1.1      2011-12-19 21:56:46

我有以下查询,它工作正常

select t1.*
from tablename t1
join (select ipaddress
      from tablename
      group by ipaddress
      having count(*) >= 2
         and count(case when CAST(date AS DATE) = '2017-12-19' then 1 end) > 0) t2
  on t1.ipaddress = t2.ipaddress

现在,我需要帮助来编写查询以删除 date NOT like '2011-12-19%' 所在的行 所以,我的表应该有一个ipaddress 的条目,其中有date like '2011-12-19%'

host              ipaddress      date
----              ---------      -----
server1           10.1.1.1      2011-12-19 21:56:46

我已经删除了date -> 2011-10-18 22:45:16 的条目这样date like '2011-12-19%' 的表中就不会出现重复的ipaddress

【问题讨论】:

  • 问题,是不是所有的字段都有?还是有另一列用作主键?
  • 有一个id 列,它是一个主键。也更新了问题
  • 另一个问题,示例中的server1.abc.com 10.1.1.1 2011-10-18 22:45:16如何满足date like '2011-12-19%' ?
  • 满足date NOT like '2011-12-19%'这里日期其实是server_createdate我想从date NOT like '2011-12-19%'所在的表中删除重复的ip条目
  • 我已经根据您的示例创建了一个示例 sqlfiddle,这是结果,请查看并编辑您的代码以反映它的问题,sqlfiddle.com/#!9/4c34dd/2/0

标签: mysql sql join group-by inner-join


【解决方案1】:

您可以将DELETEJOIN 一起使用:

delete t1
from mytable t1
join (select ipaddress
      from mytable
      group by ipaddress
      having count(*) >= 2
         and count(case when CAST(date AS DATE) = '2011-12-19' then 1 end) > 0) t2
  on t1.ipaddress = t2.ipaddress
where CAST(date AS DATE) != '2011-12-19'

使用此查询可以删除记录

host              ipaddress      date
----              ---------      -----
server1.abc.com   10.1.1.1      2011-10-18 22:45:16

从你的桌子上。

Demo here

【讨论】:

  • 哎呀,猜你打败了我xD
猜你喜欢
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多