【发布时间】:2014-02-28 08:02:49
【问题描述】:
我有以下查询,它根据 RegNumber 列值检测重复项,如果不同的行输入日期相差不到 10 分钟,则查询保留具有最高 Confidence 列值的那个。
SELECT *,
CASE
WHEN conf_max = confidence THEN 'Conf_Max'
ELSE 'Duplicate'
END AS Is_Conf_Max
FROM (SELECT *,
Max(confidence)
OVER (
partition BY regnumber) AS Conf_Max
FROM (SELECT id,
cameraid,
dateseen,
nationality,
regnumber,
confidence,
Min(dateseen)
OVER (
partition BY regnumber) AS DateSeen_Min,
Max(dateseen)
OVER (
partition BY regnumber) AS DateSeen_Max
FROM plate_read
WHERE ( cameraid IN ( 5, 6 ) )) A
WHERE Abs(Datediff(minute, dateseen_max, dateseen_min)) <= 10) B
WHERE conf_max <> confidence
ORDER BY regnumber
但是问题如下:这为我提供了 DateSeen 列相差不到 10 分钟的所有重复项。但是,如果我有另一组相隔超过 10 分钟且具有相同 RegNumber 的重复项,则不会检测到这些重复项,示例如下:
ID CamId DateSeen Nationality Reg Conf
-- ----- ------- ---------- --- ---
80 5 20/12/2013 12:10:57 E 5897HHS 94
81 5 20/12/2013 12:15:03 E 5897HHS 93
82 5 20/12/2013 12:16:17 GBZ G6746D 98
83 5 20/12/2013 12:35:57 E 5897HHS 88
84 5 20/12/2013 12:36:03 E 5897HHS 86
从上面的数据中,只有 ID 80、82 和 83 是有效的,因为 81 是 80 的副本,84 是 83 的副本。希望有人能提供帮助吗?
【问题讨论】:
-
抱歉,新成员不知道该怎么做……正在尝试。
-
感谢米海。希望现在有人可以帮助我解决我的问题。
-
那么为什么不修改分钟以选择更大的范围?
-
因为如果相隔超过 10 分钟,则不再是重复条目,而是另一个有效条目。
-
您可以有两个可能相隔 6 分钟且注册号相同的条目,这会创建 1 个重复项。半小时后,如果看到相同的注册号,它是有效的,但又一次,可能存在更多重复等。
标签: asp.net sql sql-server sql-server-2008 tsql