我有一个相当简单的数据库表,每次托盘经过RFID读取器时都会记录日志。有时会发生数据被发送两次的情况,所以有人问我是否可以找出这种情况发生的频率。与其在接下来的几天里花时间浏览日志表中的每条记录,我想一定有一种方法可以使用SQL查询提取这些数据。
例如,我的数据看起来像这样:
<表类>
ID
类型
点
RFID
登录
tbody><<tr>1 101 4101 1234 2021-01-20 06:31:25:154 2101 4101 4567 2021-01-20 06:32:24:165 3 101 4102 1234 2021-01-20 06:35:55:154 4101 4102 1234 2021-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
。