MySQL DISTINCT显示多个结果

MySQL DISTINCT显示多个结果,mysql,Mysql,我试图在最后10分钟内得到唯一的MAC地址,但由于结果中的某些原因,有些结果很简单,甚至更频繁 nID是唯一的数字1、2、3等 nLocationID只是一个自动递增的数字,如1、2、3等 sMAC是一张桌子,看起来像: 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

我试图在最后10分钟内得到唯一的MAC地址,但由于结果中的某些原因,有些结果很简单,甚至更频繁

nID是唯一的数字1、2、3等

nLocationID只是一个自动递增的数字,如1、2、3等

sMAC是一张桌子,看起来像:

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
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

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

您想要一个结果集,每个不同的
sMac
值只有一行。这需要一个
分组依据
功能。你可能需要

              SELECT sMAC, MAX(sTimeScanned) sTimeScanned
                FROM scan_data
                where sTimeScanned > date_sub(now(), interval 10 minute)
                  and nLocationID = 1 
                GROUP BY sMac 
如果您希望在特定扫描时间内从
scan\u数据
表中获取其他详细信息,则需要一个嵌套查询来检索它们。它使用上述查询为每个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

请注意,DISTINCT不是一个函数。请参阅:DISTINCT操作整行,而不是特定字段。由于时间戳不同,您的行不同。想想看——如果它按您预期的方式工作,那么您希望它在一行上输出与MAC地址相关的(可能)多个时间戳中的哪一个?这没有任何意义。我猜您可能只是想从输出中排除sTimeScanned字段,您需要切换到GROUP BY以进行适当的聚合。您还需要为每个不同的
smac
指定要扫描的
stimescanned
。类似于
从扫描数据中选择sMAC、max(sTimeScanned)、nLocationID,其中sTimeScanned>date\u sub(现在(),间隔10分钟)和nLocationID=1组(按sMAC),nLocationID顺序(按nID描述)