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

У меня огромная таблица со следующим форматом:

DATETIME                   NUMBER
--------------------------------------
2009-03-31 16:05:52.000    2453651622
2009-03-31 16:16:12.000    30206080
2009-03-31 16:16:16.000    16890039
2009-03-31 16:16:28.000    2452039696
2009-03-31 16:16:33.000    140851934
2009-03-31 16:16:51.000    2453120306
2009-03-31 16:16:57.000    2453120306
...
2009-04-01 21:15:24.000    2453651622

Как выбрать строки, которые не имеют повторяющихся чисел во втором столбце, если они встречаются с интервалом менее 15 минут?

В предыдущем примере вторая строка с номером 2453120306 является дубликатом, поскольку она находится на расстоянии менее 15 минут от предыдущего и не должна выбираться.

Последняя строка имеет тот же номер, что и первая строка, но она не является дубликатом, поскольку встречается более 24 часов спустя.

Ответы [ 2 ]

1 голос
/ 22 октября 2010
-- distinct required in case there are rows with 
-- exactly the same values for datetime and number
SELECT DISTINCT a.*
FROM your_table AS a
    LEFT JOIN your_table AS b
        ON a.[number] = b.[number]
            AND a.[datetime] > b.[datetime]
            AND a.[datetime] <= DATEADD(minute, 15, b.[datetime])
WHERE b.Number IS NULL
0 голосов
/ 22 октября 2010

попробуйте это:

Select * From Table t
Where Not Exists
   (Select * From Table
    Where DateTime Between DateAdd(second, -450,  t.DateTime)
                       And DateAdd(second,  450,  t.DateTime)
        -- next row is better to exclude same row using a PK if available
        And DateTime <> t.DateTime 
        And Number = t.Number) 

Также отредактировано для использования скользящей 15 минут на основе вашего ответа выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...