我正在检查记录在数据库中的网站条目
列:浏览器、click_type_id、引荐来源网址和日期时间
如果多行具有相同的浏览器、click_type_id 和 referrer 并且带有时间戳(彼此相隔 1 分钟内发生),则它们被视为重复。
我需要一个可以根据上述条件查询这些重复项的 sql 语句。
任何帮助表示赞赏。
我正在检查记录在数据库中的网站条目
列:浏览器、click_type_id、引荐来源网址和日期时间
如果多行具有相同的浏览器、click_type_id 和 referrer 并且带有时间戳(彼此相隔 1 分钟内发生),则它们被视为重复。
我需要一个可以根据上述条件查询这些重复项的 sql 语句。
任何帮助表示赞赏。
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)
为了防止插入
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