MS SQL根据日志时间识别重复行



我有一个相当简单的数据库表,每次托盘经过RFID读取器时都会记录日志。有时会发生数据被发送两次的情况,所以有人问我是否可以找出这种情况发生的频率。与其在接下来的几天里花时间浏览日志表中的每条记录,我想一定有一种方法可以使用SQL查询提取这些数据。

例如,我的数据看起来像这样:

<表类> ID 类型 点 RFID 登录 tbody><<tr>1101410112342021-01-20 06:31:25:1542101410145672021-01-20 06:32:24:1653101410212342021-01-20 06:35:55:1544101410212342021-01-20 06:35:55:516

可以使用lead()lag()。对于所有这样的行:

select l.*
from (select l.*,
lag(logged) over (partition by rfid order by logged) as prev_logged,
lead(logged) over (partition by rfid order by logged) as next_logged
from logs l
) l
where prev_logged > dateadd(second, -5, logged) or
next_logged < dateadd(second, 5, logged);

你的示例代码看起来像SQL Server,所以这使用SQL Server语法。

如果您只想要重复序列中的第一个记录,您可以使用类似的逻辑:

select l.*
from (select l.*,
lag(logged) over (partition by rfid order by logged) as prev_logged,
lead(logged) over (partition by rfid order by logged) as next_logged
from logs l
) l
where (prev_logged < dateadd(second, -5, logged) or prev_logged is null) and
next_logged < dateadd(second, 5, logged);

请注意,这两个都只使用rfid。我不确定rfid是否真的应该与其他列(如point)一起使用,但您的问题明确提到只复制rfid

最新更新