SQL查找在1分钟内发生的重复记录

时间:2009-12-15 20:48:41

标签: sql duplicate-data records

我正在检查记录在数据库中的网站托管

列:浏览器,click_type_id,引荐来源和日期时间

如果多行具有相同的浏览器,click_type_id和referrer并且有时间戳(在彼此的1分钟内发生),则认为它们是重复的。

我需要一个sql语句,可以根据上述标准查询这些​​重复项。

感谢任何帮助。

2 个答案:

答案 0 :(得分:13)

SELECT
     T1.browser,
     T1.click_type,
     T1.referrer,
     T1.datetime,
     T2.datetime
FROM
     My_Table T1
INNER JOIN My_Table T2 ON
     T2.browser = T1.browser AND
     T2.click_type = T1.click_type AND
     T2.referrrer = T1.referrer AND
     T2.datetime > T1.datetime AND
     T2.datetime <= DATEADD(mi, 1, T1.datetime)

答案 1 :(得分:1)

防止插入

INSERT MyTable (browser, click_type_id, referrer, [datetime])
SELECT
    @browser, @click_type_id, @referrer, @datetime
WHERE
    NOT EXISTS (SELECT *
        FROM
           MyTable M2
        WHERE
           browser = @browser AND click_type_id = @click_type_id AND referrer = @referrer
           AND
           [datetime] < DATEADD(minute, -1, @datetime))

查找现有数据(依赖于smalldatetime准确性,可能有助于避免根据评论提出问题)

SELECT
   browser, click_type_id, referrer, COUNT(*)
FROM
   MyTable
GROUP BY
    browser, click_type_id, referrer, (CAST [datetime] AS smalldatetime)
HAVING
    COUNT(*) > 1