【发布时间】: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