我正在检查记录在数据库中的网站托管
列:浏览器,click_type_id,引荐来源和日期时间
如果多行具有相同的浏览器,click_type_id和referrer并且有时间戳(在彼此的1分钟内发生),则认为它们是重复的。
我需要一个sql语句,可以根据上述标准查询这些重复项。
感谢任何帮助。
答案 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