6

我正在检查记录在数据库中的网站条目

列:浏览器、click_type_id、引荐来源网址和日期时间

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

我需要一个可以根据上述条件查询这些重复项的 sql 语句。

任何帮助表示赞赏。

4

2 回答 2

15
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)
于 2009-12-15T20:54:52.130 回答
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
于 2009-12-15T20:54:29.480 回答