我试图查找计算机何时从一个接入点跳到另一个接入点并在dbase中捕获数据。我每小时捕获一次数据,因此 pc 名称会出现多次,但 ap 只会在 PC 从一个切换到另一个时更改。我需要返回一个示例查询。
我只想在过去 12 小时内计算机上的 ap 发生更改时返回一行。
我尝试选择两个字段的不同字段,然后解析它们,但我相信必须有更好的方法。
示例表如下所示:
1 台 PC1 AP1 时间
2 PC2 AP1 时间
3 PC3 AP2 时间
4 PC4 AP2 时间
5 PC5 AP3 时间
6 PC1 AP1 时间
7 PC2 AP2 时间
8 PC3 AP2 时间
9 PC4 AP2 时间
10 PC5 AP3 时间
因此,在此示例中,唯一返回的信息应该是关于 PC2 的信息,因为它是唯一更改 AP 的单元,因此我会得到这两行(2 和 7(。
您可以使用lag()
. 在标准SQL中,这看起来像:
select t.*
from (select t.*, lag(app) over (partition by computer order by time) as prev_app
from t
) t
where prev_app <> app and
time > current_datetime - interval '12 hour';
众所周知,日期/时间功能取决于您使用的数据库,因此数据库的语法可能略有不同。
使用 EXISTS:
select t.* from tablename t
where exists (
select 1 from tablename
where computername = t.computername and ap <> t.ap
and time between dateadd(hour, -12, t.time) and dateadd(hour, 12, t.time)
)