我正在尝试创建一个将选择多个列(uniqueID,IPaddress,date,country)的查询,但我希望查询仅选择那些在给定日期显示相同IPaddress和UniqueID的记录。我一直在努力......
SELECT uniqueID AS uniqueID,
IPAddress AS IPAddr,
Date AS DDate,
Location AS Countries,
COUNT(IPAddress) AS IPCount
FROM History WHERE (uniqueID= 20677)
GROUP BY Date
ORDER BY DDate DESC, IPAddr DESC
但它确实消除了一天只出现一个Ip / UniqueID的记录。我真的只想找到 uniqueID在同一天出现在不同IP地址的记录。
答案 0 :(得分:0)
不确定我是否完全遵循,但听起来你想要加入子查询:
SELECT a.*
FROM History a
JOIN ( SELECT uniqueID, Date, COUNT(DISTINCT IPAddress)
FROM History
GROUP BY uniqueID,Date
HAVING COUNT(DISTINCT IPAddress) > 1
)b
ON a.uniqueID = b.uniqueID
AND a.date = b.date
编辑:误读你的不同IP地址部分,更新。
子查询将显示具有相同唯一ID /日期的多个IP地址的所有记录,然后将其连接到历史记录表,显示您所追踪的记录的所有字段。
答案 1 :(得分:0)
如果您正在寻找其中的重复项,则需要按三个字段进行分组:
SELECT uniqueID, IPAddress, "Date" AS DDate, Location AS Countries,
COUNT(IPAddress) AS IPCount
FROM History
WHERE uniqueID = 20677
GROUP BY uniqueId, IPAddress, "Date"
having IPCount > 1;
您实际上并不需要uniqueid
子句中的group by
,因为您只选择了一个。但是,我认为它使查询的目的更加清晰。
如上所述,这将生成错误(因为location
不在聚合子句中)或者返回location
的随机值(如果您使用的是MySQL)。如果是后者,请尝试:
SELECT uniqueID, IPAddress, "Date" AS DDate,
group_concat(Location) AS Countries,
COUNT(IPAddress) AS IPCount
FROM History
WHERE uniqueID = 20677
GROUP BY uniqueId, IPAddress, "Date"
having IPCount > 1;
此外,在数据类型和函数之后命名列并不是一个好主意。在许多数据库中,date
既是数据类型又是函数。其他一些名称,如DateAdded
,可以避免这种冲突。