Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Убрать лишние строки  [new]
asdor
Member

Откуда: Москва
Сообщений: 502
Есть проходная.
На ней установлен определитель № автомобилей.
Камеры стоят на въезд и на выезд.
Они фиксируют приближение и удаление.
И все это пишут в таблицу MSSQL

Так вот, довольно часто получается ситуация, что один и тот же № записывается несколько раз подряд.
Например:
AnId	TecId	dat	                   TRDIRECT	chanel	gn	
117	1143	2013-07-08 11:15:44.920	Приближение	2	У284УВ199	
118	1143	2013-07-08 11:15:45.430	Приближение	2	У284УВ199	
119	1143	2013-07-08 11:15:53.663	Удаление	1	У284УВ199	

где AnId-ID определившей № записи
TecId - ID техники
Далее, дата-время события, приближение-удаление,
chanel - с какой камеры
ну и сам гос. №

Юзеру надо показать, в этом случае, только 1 запись.

Ясно что время любое из этих. Секунды никому не нужны.

Не приходит в голову, как это элегантно разрулить.
8 ноя 13, 09:13    [15095318]     Ответить | Цитировать Сообщить модератору
 Re: Убрать лишние строки  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
asdor,

[dat] урезаете до минут, дальше disdtinct / max / rownumber - на ваш вкус
8 ноя 13, 09:23    [15095359]     Ответить | Цитировать Сообщить модератору
 Re: Убрать лишние строки  [new]
asdor
Member

Откуда: Москва
Сообщений: 502
StarikNavy
asdor,

[dat] урезаете до минут, дальше disdtinct / max / rownumber - на ваш вкус


Это конечно существенно уменьшит количество задвоений, но разница, даже между годами, может быть 1мс.

Может написать свою функцию, округления времени, и с ней?
8 ноя 13, 09:31    [15095384]     Ответить | Цитировать Сообщить модератору
 Re: Убрать лишние строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
asdor
Может написать свою функцию, округления времени, и с ней?

тип данных smalldatetime уже и так хранит время с точностью до минуты
8 ноя 13, 10:22    [15095610]     Ответить | Цитировать Сообщить модератору
 Re: Убрать лишние строки  [new]
Гость333
Member

Откуда:
Сообщений: 3683
asdor,

Я так понимаю, что вам нужно волевым решением выбрать некий интервал времени в секундах, в течение которого сочетание одинаковых TecId+TRDIRECT будет считаться одной записью. Пусть будет 5 секунд.
Тогда в выборку можно было бы добавить, например, такое условие:
SELECT ...
FROM Таблица t
WHERE NOT EXISTS
      (
         SELECT *
         FROM Таблица t1
         WHERE t1.TecId = t.TecId AND t1.TRDIRECT = t.TRDIRECT
               AND t1.dat > t.dat AND t1.dat < DATEADD(second, 5, t.dat)
      )

При наличии индекса, скажем, по TecId+dat+TRDIRECT такое условие должно быстро отрабатывать.
8 ноя 13, 11:36    [15096096]     Ответить | Цитировать Сообщить модератору
 Re: Убрать лишние строки  [new]
Гость333
Member

Откуда:
Сообщений: 3683
asdor
Может написать свою функцию, округления времени, и с ней?

А как именно вы хотите округлять?
8 ноя 13, 11:37    [15096101]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить