返回一列一致但另一列在一段时间内发生变化的行



我试图查找计算机何时从一个接入点跳到另一个接入点并在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)
)

最新更新