如何解决查找记录+/- 5秒的日期时间
在我的表中发现了一些数据错误,该表中有重复的记录,但在datetime字段中彼此之间只有几秒钟的距离。
例如
|-------------------|----------------|--------------------------|
| ProductID | SourceID | Datetime |
|-------------------|----------------|--------------------------|
| 1234 | 99 | 2020-08-11 00:00:01 000 |
|-------------------|----------------|--------------------------|
| 1234 | 99 | 2020-08-11 00:00:02 000 |
|-------------------|----------------|--------------------------|
我实际上知道此数据是错误的,应该是不可能的。为了找到所有可能的情况,我想选择彼此不同的产品ID和SourceID,它们在5秒钟之内有多行。如何用5秒钟+ / i编写日期时间的SQL?
解决方法
我想出了一些可以满足您发现需求的东西。它将返回上一个条目的5秒内插入的ProductID,SourceID
的唯一列表。我在查询中使用了LAG和DATEDIFF。
我刚刚看到您会满意地搜索插入15秒的记录。如果是这样,请将第二个CTE中的DATEDIFF(s,PreviousValue,[DateTime]) <= 5
更改为DATEDIFF(s,[DateTime]) <= 15
--Get Value Of Previous Record
WITH preselect AS
(
SELECT ProductID,SourceID,[DateTime],LAG([DateTime],1,NULL) OVER(PARTITION BY ProductId,SourceId ORDER BY [DateTime]) AS 'PreviousValue'
FROM [yourTable]
),--Find the difference in time
preselect2 AS
(
SELECT ProductID,DATEDIFF(s,[DateTime]) AS 'SecondDifference'
FROM preselect
WHERE PreviousValue IS NOT NULL
AND
DATEDIFF(s,[DateTime]) <= 5
)
/*Get Distinct list of ProductID,SourceID that were inserted within 5 seconds of the
previous entry*/
SELECT DISTINCT ProductID,SourceID
FROM preselect2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。