|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Есть табличка в которой навалены отметки с идентификаторами входа и выхода. Каждое событие отдельная строка, вход это или выход нужно понимать по перечню считывателей, через которые вошел или вышел. Задача - посчитать сколько человек в офисе в любой момент времени. Мысль сгруппировать по ID людей и вычесть из суммы входов сумму выходов разбивается об отсутствие временных таблиц в этой версии FB, математика в виде "суммы разности сумм" в одном запросе что то не получается, не силен я в этой СУБД. Подкиньте плз. идею, как посчитать можно. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 17:46 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
18.04.2019 17:46, IgorL пишет: > Есть табличка в которой навалены отметки с идентификаторами входа и выхода. > Каждое событие отдельная строка, вход это или выход нужно понимать по перечню считывателей, через которые вошел или вышел. > Задача - посчитать сколько человек в офисе в любой момент времени. Мысль сгруппировать по ID людей и вычесть из суммы входов сумму выходов разбивается об отсутствие временных таблиц в этой версии FB, > математика в виде "суммы разности сумм" в одном запросе что то не получается, не силен я в этой СУБД. > Подкиньте плз. идею, как посчитать можно. > Спасибо! покажи пример данных. а то не понятно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 17:49 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
IgorLЗадача - посчитать сколько человек в офисе в любой момент времени. Количество людей есть интеграл входов-выходов от минус бесконечности до данного момента времени. SUM() тебе в руки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 18:00 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Мимопроходящий, примерно так: DateTimeEventRd_IDCl_ID18.04.2019 8:12132218.04.2019 10:26162218.04.2019 10:411452218.04.2019 10:52162218.04.2019 10:551452218.04.2019 11:231342218.04.2019 11:231712218.04.2019 11:270342218.04.2019 11:281451118.04.2019 11:551711118.04.2019 12:040631118.04.2019 12:04131118.04.2019 12:061451118.04.2019 12:47161118.04.2019 15:281451118.04.2019 14:231341118.04.2019 14:260341118.04.2019 15:451451118.04.2019 15:270631118.04.2019 15:2502511 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 18:14 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, авторКоличество людей есть интеграл входов-выходов от минус бесконечности до данного момента времени. SUM() тебе в руки. Интеграл? Мне видится проще, количество входов минус количество выходов сгруппированных по Cl_ID дают единице если человек в офисе и ноль если его нет. Отрицательные значения и больше одного это значит он проходил с кем то. Отдельная тема для разборки. Сумма по людям дает количество в офисе. Никак не соображу как это в один запрос умять. :( Сделал бы с временной табличкой (да, некрасиво, знаю) но их нет у FB1. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 18:23 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
18.04.2019 18:14, IgorL пишет: > Мимопроходящий, примерно так: > DateTime Event Rd_ID Cl_ID что означают эти поля? (кроме DateTime) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 18:31 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Мимопроходящий, в поле Event пишется тип события, 0 выход, 1 вход. Rd_ID это контроллер, может быть только входа, считыватель на выходе из тогда будет подключен к другому контроллеру, только выход. Это не так важно, важно что из пары Rd_ID и Event однозначно собирается для Cl_ID (уникальный идентификатор входящего) куда он проходил, в или из помещения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 06:58 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Это реальная задача или лабораторная работа? Все эти расчёты - полная чепуха. Даже человек не может проанализировать все повторные отметки и входы-выходы, когда "дверь подержали". У нас приезжает автобус с сотрудниками - на КПП они все отмечаются, поскольку за "опоздание" оштрафовать могут, но вот в офис - это первый открыл, и вся толпа вошла. Такая система может работать в одном единственном случае - либо охранник возле дверей, не дающий пересекать без отметки каждого, либо дверь должна быть такой: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 09:17 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
WildSeryЭто реальная задача или лабораторная работа? Все эти расчёты - полная чепуха. Даже человек не может проанализировать все повторные отметки и входы-выходы, когда "дверь подержали". У нас приезжает автобус с сотрудниками - на КПП они все отмечаются, поскольку за "опоздание" оштрафовать могут, но вот в офис - это первый открыл, и вся толпа вошла. Такая система может работать в одном единственном случае - либо охранник возле дверей, не дающий пересекать без отметки каждого, либо дверь должна быть такой:.... Это реальная задача. КПП нет, отмечаются при входе и при выходе в офис. Дверей несколько, на каждой стоят контроллеры, на вход и на выход. Отмечаются весьма тщательно так как нет отметки о входе - автоматом не был на работе. Нет отметки о выходе - автоматом работал всего час или до первой отметки выхода в этот день. В конце месяца список с проблемами отметок направляют работникам, они идут в СБ просить просмотреть видео за эти дни и проставить вход/выход по камерам. В общем это хлопотно, частые обращения чреваты оргвыводами, старички отмечаются как часы, новички после пары "пролетов" тоже прикладывают тщательно. Проблема в том, что система учета похожа на лютый самопис неизвестного автора на Delphi+Fb затертого года. К тому же непонятно кем и когда установленная, нумерация контроллеров и их логика нелинейная, трудновычислимая. На MSSQL курсром и/или временными табличками без проблем, на FB что то не идет мысль. Нужно понять есть ли после последнего входа выход по каждому, провернув это по всем событиям за сегодня. Как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 11:10 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
версия FB ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 11:26 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
IgorL, Судя по вашему описанию, обязательна только отметка на вход и выход, да и то, из-за излишней старательности, могут по 2 раза отметиться. Значит, следует как минимум удалять дубли отметок. Если на обед ходят за пределы контролируемого пространства (необходимо выйти, а потом опять зайти), то всё опять плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 11:46 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
IgorLв поле Event пишется тип события, 0 выход, 1 вход. кто вот это придумал.... Вход это 1, выход это -1, тогда хоть арифметические операции над событиями можно делать, допустим sum. В результате - null, не входил, 0 - вошел и вышел, 1 - не вышел, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 12:06 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
kdv, это неважно есть case ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 12:12 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
IgorLМне видится проще, количество входов минус количество выходов сгруппированных по Cl_ID дают единице если человек в офисе и ноль если его нет. Отрицательные значения и больше одного это значит он проходил с кем то. Отдельная тема для разборки. Сумма по людям дает количество в офисе. Это и есть интеграл входов-выходов в конечном итоге. Только в обход. Тебе же нужно только количество людей в офисе, а не поимённый список, не так ли?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 12:17 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Короче, надоело мне, вот готовый запрос, который выведет количество людей, вошедших, но не вышедших после этого на заданный момент времени. Пользуйся, аффтар. Код: sql 1. 2. 3. 4. 5. 6.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 12:36 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
FROM - время когда в офисе гарантированно никого нет, TO - момент времени, на который нужны данные ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 12:41 |
|
Помогите пожалуйста идеей как сделать в Firebird (Диалект 1)
|
|||
---|---|---|---|
#18+
WildSeryIgorL, Судя по вашему описанию, обязательна только отметка на вход и выход, да и то, из-за излишней старательности, могут по 2 раза отметиться. Значит, следует как минимум удалять дубли отметок. Если на обед ходят за пределы контролируемого пространства (необходимо выйти, а потом опять зайти), то всё опять плохо. Да, это если суммировать количество входов и вычитать из них количество выходов. Действительно возникает рассинхрон. Дубли удалять не нужно, логически если максимальное время входа больше максимального времени выхода, то работник внутри. Если наоборот, то он вышел. Хуже другое, считыватели подключены на разные линии/контроллеры по асинхронным протоколам, как выяснилось довольно медленным. Это сбивает в случаях если зашел и тут же вышел. Или вышел, но тут же вернулся. Спасибо всем за идеи, пока накидал в Lazarus два DS с вычислением максимального времени входа и выхода каждого и связал по Cl_ID. Получилось достаточно точно, но не гарантированно. :( По причине вышеописанных "родовых" болячек системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 19:10 |
|
|
start [/forum/topic.php?fid=40&fpage=24&tid=1560729]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 166ms |
0 / 0 |