0

我有一个 addrwatch 数据库(https://github.com/fln/addrwatch),它的数据库类似于:

1381347053|eth0|0|20:XX:XX:XX:XX:a9|192.168.1.108|0
1381347056|eth0|0|00:XX:XX:XX:XX:02|192.168.1.138|0
1381347066|eth0|0|f4:XX:XX:XX:XX:39|192.168.1.152|0
1381347093|eth0|0|00:XX:XX:XX:XX:27|192.168.1.157|0
1381347112|eth0|0|00:XX:XX:XX:XX:20|192.168.1.104|0
1381347132|eth0|0|00:XX:XX:XX:XX:cc|192.168.1.107|0
1381347142|eth0|0|00:XX:XX:XX:XX:0b|192.168.1.5|0

我想退回所有物品:

  • 在过去 24 小时内可以看到 mac 地址
  • 超过 24 小时前没有看到 mac 地址

由于 addrwatch 为 mac 地址的每个活动都放置条目,因此仅搜索过去 24 小时将返回所有活动的网络设备。我只想列出在过去 24 小时内引入网络的设备。

4

2 回答 2

2

试试这个:

SELECT mac
  FROM Table1
 WHERE mac IN(
              SELECT DISTINCT mac 
                FROM Table1
               WHERE date(time, 'unixepoch') = date('now')
             )
   AND mac NOT IN (
                   SELECT DISTINCT mac
                     FROM Table1
                    WHERE date(time, 'unixepoch') <= date('now', '-1 day')
                  )

在SqlFiddle上。

于 2013-10-09T22:20:16.180 回答
1

此查询将执行以下操作:

SELECT DISTINCT mac FROM t WHERE mac NOT IN (
    SELECT mac FROM t WHERE time < CAST(STRFTIME('%s', 'NOW', '-1 DAY') AS INTEGER)
);
于 2013-10-10T09:57:35.283 回答