MySQL在select中选择

时间:2014-03-21 13:48:48

标签: mysql select join

我甚至不确定标题是否正确,如果不是就道歉!

我有一个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)。

我处于一个平坦的旋转中,我的思绪已经完全消失了。任何帮助将不胜感激。

2 个答案:

答案 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...而是将其替换为使用SELECTSELECT报告的... JOINT当您从2个或更多表中提取数据时使用...希望这可以帮助您......: - )