我正在努力编写一些SQL来提取新的IP地址。这是我到目前为止所拥有的,但它打印的所有东西,所以我认为它没有考虑到日期部分。
SELECT DISTINCT dest_ip FROM ips WHERE date >= 2017-11-23;我想要的是从dest_ip字段查看所有给定的日期唯一的IP地址,然后检查它们是否已经存在于dest_ip字段中,如果不存在,则返回它们。
以下是当前的数据库:
+----+------------+----------+------------------+------------------+------+
| id | date | time | source_ip | dest_ip | port |
+----+------------+----------+------------------+------------------+------+
| 1 | 2017-11-11 | 00:21:21 | 192.168.1.1 | 177.43.234.23 | 443 |
| 2 | 2017-11-11 | 14:21:07 | 192.168.1.1 | 177.43.234.45 | 443 |
| 3 | 2017-11-13 | 14:21:09 | 192.168.1.1 | 177.43.234.78 | 443 |
| 4 | 2017-11-23 | 14:21:09 | 192.168.1.1 | 177.43.234.78 | 80 |
| 5 | 2017-11-23 | 14:22:13 | 192.168.1.1 | 177.43.234.78 | 53 |
| 6 | 2017-11-23 | 13:37:13 | 192.168.1.1 | 8.8.8.8 | 53 |
+----+------------+----------+------------------+------------------+------+我希望在运行查询时只返回ID 6,因为这是当天唯一的新IP地址。
发布于 2017-11-23 20:59:05
你想要那样的东西吗?
SELECT dest_ip FROM ips WHERE
date >= 2017-11-23 and dest_ip NOT IN (SELECT dest_ip FROM ips WHERE
date < 2017-11-23 group by dest_ip)
group by dest_ip发布于 2017-11-23 21:01:56
如果您可以提供一个您想要的输出的示例,但是根据您已经说过的内容和您编写的SQL查询,您将得到两个IP地址,这将是有帮助的。
之所以如此,是因为在WHERE子句中,您说要查找所有等于或大于2017年11月23日的日期。您必须在where子句中包含date列才能得到第6行。
create table #tbl1 (
id int
,[date] date
,[time] time
,source_ip nvarchar(20)
,dest_ip nvarchar(20)
,[port] int
);
insert into #tbl1
values
(1,'2017-11-11','00:21:21','192.168.1.1','177.43.234.23',443)
,(2,'2017-11-11','14:21:07','192.168.1.1','177.43.234.45', 443)
,(3,'2017-11-13','14:21:09','192.168.1.1','177.43.234.78',443)
,(4,'2017-11-23','14:21:09','192.168.1.1','177.43.234.78',80)
,(5,'2017-11-23','14:22:13','192.168.1.1','177.43.234.78',53)
,(6,'2017-11-23','13:37:13','192.168.1.1','8.8.8.8',53)
;
select
distinct(dest_ip) as ip
from #tbl1
where
[date] >= '20171123'
and [time] < '14:00'
;
drop table #tbl1;https://stackoverflow.com/questions/47463059
复制相似问题