MYSQL从表中获取重复值

问题描述 投票:1回答:3

我有三个字段的mysql表

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

我写了以下查询但得到0行

select * from table p1
group by p1.ipaddress having count(*) >= 2
and p1.date like '2017-12-19%' 
;
mysql sql join group-by inner-join
3个回答
1
投票

子查询t2返回具有至少2行的ip地址,以及该特定日期的至少一行。 qazxsw poi与t2的结果。

JOIN

根据ANSI SQL,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 是一个保留字,因此您可能需要对其进行分隔。 (反单引号?)


0
投票

尝试类似的东西;

date

我强烈建议你,不要把日期字段比作select t1.host from table t1 inner join (select p1.ipaddress,max(p1.date) as date from table p1 where cast(p1.date as Date) = '2017-12-19' group by p1.ipaddress having count(*) > 1) t2 ON t1.ipaddress = t2.ipaddress and t1.date = t2.date


0
投票
like

你需要:

  • select host from table p1 where CAST(p1.date AS DATE) = '2017-12-19' group by p1.host having count(distinct p1.ipaddress) >= 2; 分组,所以当您计算IP地址时,您将获得正确的计数。
  • 使用host子句,由于日期是日期时间,因此不要使用通配符。
  • 仅限SELECT主机。
  • 如果要选择除主机之外的其他列,则需要额外的查询。

请注意:您尝试执行的操作有问题。如何条件WHERE应该返回预期的结果,如日期date like '2011-12-19%'2011-10-18 22:45:16。我觉得你误解了外卡。您不能以这种方式使用通配符,您可以使用日期运算符和条件,因为它是日期时间列。

  • 2011-12-19 21:56:46
© www.soinside.com 2019 - 2024. All rights reserved.