我检查网站entrys内存在的:浏览器,click_type_id,引荐和日期时间SQL查找重复记录1分钟都被记录在数据库</p> <p>列彼此
如果多行具有相同的浏览器,click_type_id和引荐来源并被加时间戳(发生在彼此的1分钟内),它们被认为是重复的。
我需要一个sql语句,可以根据上述条件查询这些重复项。
任何帮助表示赞赏。
我检查网站entrys内存在的:浏览器,click_type_id,引荐和日期时间SQL查找重复记录1分钟都被记录在数据库</p> <p>列彼此
如果多行具有相同的浏览器,click_type_id和引荐来源并被加时间戳(发生在彼此的1分钟内),它们被认为是重复的。
我需要一个sql语句,可以根据上述条件查询这些重复项。
任何帮助表示赞赏。
来防止插入
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
如果你有,例如,12:00:25和12:01:14,smalldatetime转换不会成为问题吗? – 2009-12-15 21:00:47
@Tom H:是的,但是它的时间取决于你如何定义一分钟;-) – gbn 2009-12-16 05:32:09
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)
你也可以在选择中取消t2浏览器,click_type和引用者引用,因为它们将始终等于t1。 – ryanulit 2009-12-15 21:12:15
好点。这是完成 – 2009-12-16 15:02:33
感谢您的答案。然而,任何想法如何在1分钟内统计出现次数。直接使用'count'和'groupby'不会产生准确的结果。它给出了“成功自联接次数”,而不是加入前的左表数量。 – 2017-02-06 10:31:14
删除?全选?测试并防止插入? – gbn 2009-12-15 20:51:26
什么样的方言?有没有听说过小组? – Paco 2009-12-15 20:56:22
一个有趣的问题是,你在另一分钟之内会考虑什么?如果在12:30:05有一排,12:30:45有一排,而在12:31:10有一排,前两个在一分钟之内,后两个也是,但第一个和最后一个不是。你必须弄清楚如何解决这个问题,作为你的解决方案的一部分。 – BBlake 2009-12-15 20:57:34