Кулак всего, переместите таблицу на SQLServer 2008, как вы говорите. Затем этот запрос может помочь вам для групп 2-х человек:
select t1.pesonId as Person1, t2.personId as Person2
from
yourTable as t1
inner join
yourTable as t2
on
t2.PersonId > t1.PersonId and --to avoid t1,t2 and t2,t1
t2.Place = t1.Place and
t2.Type = t1.type and
t2.date between dateadd(hh, -2, t1.date) and dateadd(hh, +2, t1.date)
group by
t1.pesonId, t2.personId
having count(*) > 1 --more than one time as you say
Затем этот запрос может помочь вам для групп 3-х человек:
select t1.pesonId as Person1, t2.personId as Person2,, t3.personId as Person3
from
yourTable as t1
inner join
yourTable as t2
on
t2.PersonId > t1.PersonId and
t2.Place = t1.Place and
t2.Type = t1.type and
t2.date between dateadd(hh, -2, t1.date) and dateadd(hh, +2, t1.date)
inner join
yourTable as t3
on
t3.PersonId > t2.PersonId and
t3.Place = t1.Place and
t3.Type = t1.type and
t3.date between dateadd(hh, -2, t1.date) and dateadd(hh, +2, t1.date)
group by
t1.pesonId, t2.personId, t3.personId
having count(*) > 1 --more than one time as you say
У меня есть tested first query in data taking Post as your table, здесь де-результаты :
Person1 Person2
------- ------- ---
22656 23354 584
22656 29407 237
22656 23283 230
22656 69083 189
22656 57695 178
157882 203907 177
26428 131527 175
20862 131527 163
22656 34397 159
22656 65358 150
(10 row(s) affected)
для более сложного анализа, я предлагаю вам использовать SSAS или перейти к инструменту Datamining как knime.
Эта проблема, похоже, требует возможности группировки по каждой записи и поиска строк, находящихся в пределах одной единственной записи. Но опять же, если вы используете произвольное медианное время, это становится еще более сложным. Что нужно сделать, может быть, больше объяснять точные логические требования для каждой «группы». –
Какие RDBMS (Oracle, SQLServer, MySQL и т. Д.) Это? Функции даты/операторы различаются между СУБД, поэтому это повлияет на ответ. –
И ЧТО ТЫ ИСКЛЮЧАЛИ? – JNK