我试图在过去的10分钟内获得唯一的MAC地址,但由于某种原因,结果有些结果是三次,甚至更频繁。
nID是唯一的数字1,2,3等。
nLocationID只是一个自动增量数字,如1,2,3等。
sMAC是一张表,看起来像:
b8:76:3f:76:db:b3
sTimeScanned也是一个包含以下内容的表:
2018-02-14 14:55:45.145049
这是我正在使用的查询。
SELECT DISTINCT(sMAC), sTimeScanned, nLocationID
from scan_data where sTimeScanned > date_sub(now(), interval 10 minute)
and nLocationID = 1 order by nID DESC;
我的输出例如如下:
ae:b6:42:f3:ac:98 2018-02-14 15:43:20.506827 1
ae:b6:42:f3:ac:98 2018-02-14 15:43:20.475822 1
00:10:20:57:67:bc 2018-02-14 15:43:20.105565 1
00:10:20:57:67:bc 2018-02-14 15:43:20.105565 1
00:10:20:57:67:bc 2018-02-14 15:43:20.105565 1
有人知道为什么提前感谢。
答案 0 :(得分:0)
您希望每个不同值sMac
只有一行的结果集。这需要GROUP BY
功能。你可能想要
SELECT sMAC, MAX(sTimeScanned) sTimeScanned
FROM scan_data
where sTimeScanned > date_sub(now(), interval 10 minute)
and nLocationID = 1
GROUP BY sMac
如果您希望scan_data
表中的其他详细信息用于特定扫描时间,则您需要嵌套查询来检索它们。它使用上面的查询为每个sMac查找适当的扫描时间,然后使用JOIN从原始表中提取详细信息。
SELECT a.sMac, a.sTimeScanned, a.nLocationID
FROM scan_data a
JOIN (
SELECT sMAC, MAX(sTimeScanned) sTimeScanned
FROM scan_data
where sTimeScanned > date_sub(now(), interval 10 minute)
and nLocationID = 1
GROUP BY sMac
) b ON a.sMac = b.sMac AND a.sTimeScanned = b.sTimeScanned
ORDER BY a.nID