6

データベースに記録されている Web サイトのエントリをチェックしています

列: browser、click_type_id、referrer、datetime

複数の行に同じ browser、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 に答える