SQL находит повторяющиеся записи, происходящие в течение 1 минуты друг от друга - PullRequest
4 голосов
/ 15 декабря 2009

Я проверяю записи на сайте, которые записаны в базе данных

столбцы: браузер, click_type_id, реферер и дата / время

если несколько строк имеют один и тот же браузер, click_type_id и referrer и имеют временную метку (происходят в течение 1 минуты друг от друга), они считаются дубликатами.

Мне нужен оператор SQL, который может запрашивать эти дубликаты на основе вышеуказанных критериев.

Любая помощь приветствуется.

Ответы [ 2 ]

14 голосов
/ 15 декабря 2009
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 голос
/ 15 декабря 2009

Для предотвращения вставок

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))

Поиск в существующих данных (основывается на небольшой точности времени и может помочь избежать проблем согласно комментарию к вопросу)

SELECT
   browser, click_type_id, referrer, COUNT(*)
FROM
   MyTable
GROUP BY
    browser, click_type_id, referrer, (CAST [datetime] AS smalldatetime)
HAVING
    COUNT(*) > 1
...