MySQL DISTINCT显示多个结果

时间:2018-02-14 14:40:16

标签: mysql

我试图在过去的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

有人知道为什么提前感谢。

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