T-SQL объединяет пары строк с одинаковыми датой и временем - PullRequest
0 голосов
/ 08 марта 2012

Возможно ли объединить пары строк с одинаковыми (<500 мс) значениями времени и даты, оставив другие строки без изменений? </p>

У меня есть следующая таблица событий:

ID    DateTime                  FileName  Event
=================================================
001   2011-04-04 12:30:15.000   File_A    Deleted
002   2011-04-04 15:30:37.000   File_A    Created
003   2011-04-05 08:30:25.000   File_A    Deleted
004   2011-04-05 08:30:25.050   File_A    Created

Если у меня есть пара событий «Удалено» и «Создано» в промежутке времени 500 мс, запрос должен объединить эти две строки и поместить событие как «измененное».

Результат должен быть:

DateTime                  FileName  Event
============================================
2011-04-04 12:30:15.000   File_A    Deleted
2011-04-04 15:30:37.000   File_A    Created
2011-04-05 08:30:25.000   File_A    Modified

Заранее спасибо ..

Ответы [ 2 ]

0 голосов
/ 08 марта 2012
SELECT t1.DateTime, t1.FileName, 'Modified' as Event
FROM Table t1
JOIN Table t2 ON DATEDIFF(millisecond, t1.DateTime, t2.DateTime) < 500
              AND t1.Event = 'Deleted' AND t2.Event = 'Created'
UNION ALL
SELECT t3.DateTime, t3.FileName, t3.Event
FROM Table t3 
WHERE NOT EXISTS(SELECT 1 
                 FROM Table t4
                 JOIN Table t5 ON DATEDIFF(millisecond, t4.DateTime, t5.DateTime) < 500
                               AND t4.Event = 'Deleted' AND t5.Event = 'Created' 
                               AND t3.ID IN (t4.ID, t5.ID)
)

... ладно, должен быть лучший способ вернуть не объединенные результаты. Но это должно работать?

0 голосов
/ 08 марта 2012

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

select cast(DATEPART(hour, DateColumn) as varchar(2)) + ':' + cast(DATEPART(minute, DateColumn) as varchar(2)) + ':' + cast(DATEPART(second, DateColumn) as varchar(2)) as DateTime,
max(filename) as FileName, Max(event) as event
from table
group by 
cast(DATEPART(hour, DateColumn) as varchar(2)) + ':' + cast(DATEPART(minute, DateColumn) as varchar(2)) + ':' + cast(DATEPART(second, DateColumn) as varchar(2)) as DateTime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...