我檢查網站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