SQL返回不同的值,然后按日期过滤

时间:2019-03-27 09:13:48

标签: sql sql-server

如何仅选择特定日期的,以前未输入的新添加记录行?

我的源数据是:

All data

SELECT DISTINCT 
    Date, IP
FROM
    tblIPs
WHERE
    (Date = '2019-03-25')

这将返回:

enter image description here

但是10.0.0.1以前确实存在于数据库中,所以我不希望它出现在我的结果中。

有什么方法可以选择唯一的IP地址(无论日期如何),然后按日期(2019-03-25)进行过滤?

6 个答案:

答案 0 :(得分:7)

您可以使用group byhaving

SELECT MIN(Date), IP
FROM tblIPs
GROUP BY IP
HAVING MIN(Date) = '2019-03-25'

答案 1 :(得分:3)

请尝试这个。

SELECT 
    DISTINCT A.Date, A.IP
FROM        
   tblIPs A
   INNER JOIN tblIPs B
   ON A.IP <> B.IP
   AND A.DATE <> B.DATE
WHERE     
   (A.Date = '2019-03-25')

答案 2 :(得分:3)

因此,您希望出现在2019-03-25的IP,而不要出现在此之前:

SELECT IP FROM tblIPs WHERE DATE = '2019-03-25'
EXCEPT
SELECT IP FROM tblIPs WHERE DATE < '2019-03-25'
;

如果您还想排除在2019-03-25之后再次出现的IP,请将<更改为<>

答案 3 :(得分:1)

SELECT * FROM (SELECT Date, IP, row_number() over (partition by IP order by date desc)as recno
FROM         tblIPs ) TT
WHERE     (Date = '2019-03-25') and recno = 1

答案 4 :(得分:1)

这将适合您的情况

SELECT T.DATE, T.IP
FROM tblIPs as T
INNER JOIN (
    SELECT count(id) as count, IP FROM tblIPs
    GROUP BY ip
    HAVING COUNT(id) = 1
) AS A
ON (T.IP = A.IP)
WHERE DATE = '2019-03-25'

答案 5 :(得分:1)

这是你在找什么吗?

SELECT ips.*
FROM tblIPs ips
WHERE EXISTS (SELECT 1 FROM tblIPs ips1 WHERE ips1.IP = ips.IP AND ips.Date <> ips.Date);
相关问题