我甚至不确定标题是否正确,如果不是就道歉!
我有一个MySQL数据库,其中包含从多个接入点收集的Wi-Fi设备的详细信息。
我的SELECT
语句会返回在1小时内找到的所有设备:
SELECT mac
FROM TBLWiFi
GROUP BY
mac
HAVING COUNT( mac ) >1
AND TIMESTAMP >= DATE_SUB( NOW( ) , INTERVAL 1 HOUR )
)
结果如下:
╔═══════════════════╦══════════════════╦═════════════╗
║ mac ║ timestamp ║ reportedby ║
╠═══════════════════╬══════════════════╬═════════════╣
║ B0:02:94:1D:3B:43 ║ 21/03/2014 12:27 ║ AP-3c9b33d0 ║
║ C0:3E:0F:0F:2D:EB ║ 21/03/2014 12:37 ║ AP-3c9b33d0 ║
║ 64:70:02:29:16:AE ║ 21/03/2014 12:32 ║ AP-3c9b33d0 ║
║ B0:02:94:1D:3B:43 ║ 21/03/2014 12:46 ║ AP-5c9b33d0 ║
║ B4:F0:AB:C2:F6:92 ║ 21/03/2014 12:46 ║ AP-3c9b33d0 ║
║ 00:26:AB:F1:7C:EE ║ 21/03/2014 12:45 ║ AP-5c9b33d0 ║
║ B0:02:94:1D:3B:43 ║ 21/03/2014 12:45 ║ AP-4c9b33d0 ║
║ 1C:C1:DE:6A:90:47 ║ 21/03/2014 12:56 ║ AP-4c9b33d0 ║
║ B4:F0:AB:C2:F6:92 ║ 21/03/2014 13:02 ║ AP-3c9b33d0 ║
║ 00:26:AB:F1:7C:EE ║ 21/03/2014 13:07 ║ AP-4c9b33d0 ║
╚═══════════════════╩══════════════════╩═════════════╝
我现在要做的是从此列表中找出多个接入点(mac
)报告了哪些设备(reportedby
)。
我处于一个平坦的旋转中,我的思绪已经完全消失了。任何帮助将不胜感激。
答案 0 :(得分:2)
首先,您的查询应如下所示:
SELECT mac
FROM TBLWiFi
WHERE TIMESTAMP >= DATE_SUB( NOW( ) , INTERVAL 1 HOUR )
GROUP BY mac
HAVING COUNT( mac ) > 1 ;
在having
子句中,timestamp
上的条件每timestamp
只比较一个mac
。被比较的那个来自任意一行。
要获得多个接入点,请将having
子句更改为:
HAVING COUNT(mac) > 1 and
COUNT(DISTINCT reportedby) > 1;
实际上,如果有多个reportedby
,那么就会有多行,所以这就足够了:
HAVING COUNT(DISTINCT reportedby) > 1;
答案 1 :(得分:0)
SELECT mac
FROM TBLWiFi
GROUP BY
mac
HAVING COUNT( reportedby ) >1
AND TIMESTAMP >= DATE_SUB( NOW( ) , INTERVAL 1 HOUR ))
我不确定你为什么想拥有COUNT (mac) > 1...
而是将其替换为使用SELECT
或SELECT
报告的... JOINT
当您从2个或更多表中提取数据时使用...希望这可以帮助您......: - )