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

Откуда:
Сообщений: 113
На входе сплошная таблица фактов - входов выходов.
Надо найти по одному человеку - и собрать соответственно время внутри помещения.
Хочется без циклов и курсоров.
Сделал из неё таблицу по 1 человеку
2009-07-01 14:01:00.000	х	Астахов Станислав Александрович
2009-07-01 19:37:00.000	ы	Станислав Александрович
2009-07-02 13:02:00.000	х	Станислав Александрович
2009-07-02 19:57:00.000	ы	Станислав Александрович
2009-07-03 12:59:00.000	х	Станислав Александрович
2009-07-03 18:13:00.000	ы	Станислав Александрович
2009-07-06 12:16:00.000	х	Станислав Александрович
2009-07-06 18:40:00.000	ы	Станислав Александрович
2009-07-07 12:18:00.000	х	Станислав Александрович

х - вход
ы - выход

Может начинаться с выхода - таблица за 1 месяц, по дате не сгруппровать - может быть вход сегодня выход завтра.
10 авг 09, 15:03    [7517935]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
Rainmib,

Проблема то в чем?
10 авг 09, 15:05    [7517948]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33348
Блог
Алгоритм например такой, на псевдоязыке)

select человек, sum(datediff(...))
  from
(
select *, (зависимый подзапрос, возвращающий время следующего выхода человека)
  from t
  where вход = true
)
group by человек
10 авг 09, 15:12    [7517985]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Rainmib
Member

Откуда:
Сообщений: 113
Вот конкретная таблица - date , event, name
Приведённая в 1 посте.
Она уже по 1 человеку - её надо привести к таблице:
День месяца - вход - выход - количество минут в помещении
день месяца - вход выход - количество минут в помещении
10 авг 09, 15:17    [7518023]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Сгруппировать по фио, статусу входа, дате
поместить в таблицу1 с identity

Сгруппировать по фио, статусу выхода, дате
поместить в таблицу2 с identity


по столбцу identity join

datediff и SUM
10 авг 09, 15:28    [7518095]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А может быть два раза подряд х или ы?
Каким образом это контролируется и гарантируется?
И что надо выдать, если такое возможно?
10 авг 09, 15:50    [7518262]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
iap,

У нас например точно может.Приложил карточку, открыл дверь тут раз и поймал меня кто-то в коридоре.Постояли, поболтали и я второй раз вошел при этом не выходя(И обратно с выходом тоже самое).

ЗЫ:Но думаю что автор не будет заморачиваться этой ситуаций
10 авг 09, 15:53    [7518287]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Rainmib
Member

Откуда:
Сообщений: 113
Нет у нас точно не может - если прикладываешь 2 раза к входу - турникет не сработает - заставить приложить 1 раз к выходу - потом к входу сработает. На железном уровне гарантировано последовательное прохождение.
10 авг 09, 15:58    [7518322]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Rainmib
Нет у нас точно не может - если прикладываешь 2 раза к входу - турникет не сработает - заставить приложить 1 раз к выходу - потом к входу сработает. На железном уровне гарантировано последовательное прохождение.
На самом деле, никто не мешает удалить, проапдейтить или вставить записи "не по порядку", если на то будут права.
И никакие карточки и "прикладывания к турникету" тут не при чём.
Некоторую гарантию могут дать констрейнты и триггеры
(хотя, конечно, админ это всё сможет поотключать и обойти, но это уже злой умысел, а не небрежность, например).
10 авг 09, 16:07    [7518398]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
just passing by
Guest
Rainmib
Нет у нас точно не может - если прикладываешь 2 раза к входу - турникет не сработает - заставить приложить 1 раз к выходу - потом к входу сработает. На железном уровне гарантировано последовательное прохождение.

Прикольно... сначала "как бы вошел", а потом "как-бы вышел". Т.е. согласно данным, человек был внутри этот промежуток времени, а реально нет.
10 авг 09, 16:10    [7518423]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
Rainmib
Нет у нас точно не может - если прикладываешь 2 раза к входу - турникет не сработает - заставить приложить 1 раз к выходу - потом к входу сработает. На железном уровне гарантировано последовательное прохождение.
Нельзя так проектировать базы данных, молодой человек :-)

А если в турникете ошибка, если данные сотрутся?

А если турникет на новый заменят, все сотрудники выйдти не смогут?

А если пожар, и сотрудников эвакуировать надо - турникет подносить к пожарной машине???
10 авг 09, 16:11    [7518430]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
just passing by
Rainmib
Нет у нас точно не может - если прикладываешь 2 раза к входу - турникет не сработает - заставить приложить 1 раз к выходу - потом к входу сработает. На железном уровне гарантировано последовательное прохождение.

Прикольно... сначала "как бы вошел", а потом "как-бы вышел". Т.е. согласно данным, человек был внутри этот промежуток времени, а реально нет.
Вот-вот - нельзя проектировать БД так, чтобы в угоду системы приходилось выдумывать те факты, коотрых нет.

Особенно, если придётся придумать ночное присутствие человека ради того, чтобы система разрешила его впустить - ему-же придётся оплачивать работу в ночь, а то и за несколько дней...
10 авг 09, 16:14    [7518454]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Rainmib
Member

Откуда:
Сообщений: 113
Это разве я придумал - кто то взял поставил систему я вообще не при чём - она даже к базе данных не подключена... Мне вообще данные в виде текстового файла приносят с разделителями на дискетке.
И за то им спасибо.
10 авг 09, 16:21    [7518506]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
Rainmib
Это разве я придумал - кто то взял поставил систему я вообще не при чём - она даже к базе данных не подключена... Мне вообще данные в виде текстового файла приносят с разделителями на дискетке.
И за то им спасибо.
Да не проблема - вам просто перед началом программирования нужно описать для себя алгоритм обработки данных (каким образом определить время нахождения человека внутри помещения) с учётом возможных ошибок в исходных данных.

Тогда будет всё просто.
10 авг 09, 16:30    [7518568]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Сергей Мишин
Member

Откуда:
Сообщений: 376
Rainmib
Это разве я придумал - кто то взял поставил систему я вообще не при чём - она даже к базе данных не подключена... Мне вообще данные в виде текстового файла приносят с разделителями на дискетке.
И за то им спасибо.

Тем более пологаться на "железный уровень" не стоит, сегодня принесли, завтра забыли, а то будет потом что один ночует на работе,а другой не появляеться, а в реальности всё наоборот-)
10 авг 09, 16:42    [7518640]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33348
Блог
Сергей Мишин

Тем более пологаться на "железный уровень" не стоит, сегодня принесли, завтра забыли, а то будет потом что один ночует на работе,а другой не появляеться, а в реальности всё наоборот-)


угу, самое лучшее - каждому сотрднику повесить gps-навигатор, который будет ежесекундно отправлять данные о его местанахождении, тогда никаких проблем)

ps а если серьезно, то скоро постановщики задачи поймут, что этим данным верить нельзя, и забьют на это, знаем, проходили такое)
10 авг 09, 17:11    [7518834]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
если задача простая, то скорее всего уже на форуме обсуждалась. как минимум 1 раз. ну а я скажу что не 1 сотню раз обсуждалось. поищите поиском.

для спящего время бодрствования равносильно сну
10 авг 09, 17:18    [7518873]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Rainmib
Member

Откуда:
Сообщений: 113
Можно подумать что есть как то идеи как реальный контроль сделать...
Запутанки есть конечно - когда реально база начинается с выхода
10 авг 09, 17:40    [7518992]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
dima.dp.ua
Member

Откуда:
Сообщений: 42
Нtчто подобное уже обсуждалось тут
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=135047
и еще в одной теме, но на нее не могу найти ссылку.
10 авг 09, 18:44    [7519285]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
rata
Member

Откуда:
Сообщений: 130
Rainmib
Нет у нас точно не может - если прикладываешь 2 раза к входу - турникет не сработает - заставить приложить 1 раз к выходу - потом к входу сработает. На железном уровне гарантировано последовательное прохождение.

Жизненная ситуация- Вы не просто входили, а вносили что тяжелое- столы, например, или там серверы.
Есс-но, не через турникет.
С точки зрения турникета Вас в здании нет - и он вас не выпустит :-)
11 авг 09, 07:30    [7520134]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
Rainmib
Member

Откуда:
Сообщений: 113
Ну и что зато когда другой раз приду - турникет заставит меня сначала выйти и потом зайти - а значит в базе будет пара вход выход....
11 авг 09, 10:46    [7520758]     Ответить | Цитировать Сообщить модератору
 Re: Обычная задача контроля входа выхода.  [new]
iap
Member

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

версия сервера-то какая?
11 авг 09, 11:00    [7520889]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить