sql - 查找几乎重复的记录
问题描述
我正在寻找一种方法来检索可能“或多或少”重复相同记录的数据。
样本数据:
+----+----------+------+--------------------------+
| ID | Date | Item | Descripion |
+----+----------+------+--------------------------+
| 11 | 1/1/2018 | CPU | CPU needs replacement |
| 11 | 1/2/2018 | CPU | CPU requires replacement |
| 12 | 1/1/2018 | CPU | CPU needs replacement |
+----+----------+------+--------------------------+
前两条记录是重复的,而最后一条则不是。
逻辑
如果是同一个ID且时间跨度小于等于2天,持有同一个物品。
输出
按 ID 排序的数据集,其中包含几乎重复的数据。
解决方案
首先,您不应该使用 Oracle 保留关键字作为列名,DATE
因为您必须始终将其放在双引号中。
现在,我相信你需要类似下面的东西,但如果没有你预期的输出就很难说。此外,您应该尝试提供更好的结果集。在这种情况下,如果您有相同ID
的多天,并且如果在任何一天或那些天的差异小于 2 天,您将获得所有行。
要仅获取差异 <=2 天的记录,请使用
SELECT ID,"DATE",ITEM,DESCRIPTION
FROM
(SELECT T.*,
LEAD(TRUNC("DATE"), 1) OVER ( PARTITION BY ID ORDER BY "DATE")
-
TRUNC("DATE")
AS DIF1,
TRUNC("DATE")
-
LAG(TRUNC("DATE"), 1) OVER (PARTITION BY ID ORDER BY "DATE")
AS DIF2
FROM FOCUS_SAMPLE T
) T1
WHERE T1.DIF1 <= 2 OR T1.DIF2 <=2
要获取所有记录,以防有 1 个匹配项使用
SELECT *
FROM FOCUS_SAMPLE
WHERE ID IN (SELECT ID
FROM (SELECT T.*,
LEAD(TRUNC("DATE"), 1)
OVER (
PARTITION BY ID
ORDER BY "DATE") - TRUNC("DATE") AS DIF
FROM FOCUS_SAMPLE T) T1
WHERE T1.DIF <= 2)
推荐阅读
- java - 扩展或采用参数,哪种方法更好以及为什么
- javascript - 如何使用 lit html 在 Web 组件中使用 CSS“目标”选择器
- javascript - iframe 视频的替代图像
- css - 如何给出固定位置的摆动动画效果?
- python - Numpy:将行值广播到频道
- node.js - Installing node-sass errors with 'ELIFECYCLE'
- visual-studio - 如何使用 MSVC 构建工具从命令行构建 SLN 文件
- react-native - 使用 TouchableWithoutFeedback 反应本机 onPress 不起作用
- node.js - fetch post form with ref values
- django - 使用外键名称过滤 Django ViewSet