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

Откуда:
Сообщений: 77
Всем доброго времени суток!

Прошу помощи у гуру. Есть таблица с пользователями. Когда пользователь начинает работу, он появляется в таблице. Как только работа завершена, из таблицы удаляется. Мне нужно собрать инфу по простою пользователей. Все промежутки. Т.е. промежуток времени - логин. Кол-во пользователей ограничено и все каждый день участвуют в работе.

Думаю создать таблицу, куда будет вставляться информация по пользователям в работе. Как потом вывести промежутки времени по простою? Или есть другой, более простой способ?
5 июн 17, 01:47    [20538844]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
Corei3
Или есть другой, более простой способ?
Есть: программиста нанять.
5 июн 17, 02:00    [20538850]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Пользователи будут хитрить: делать коннект к БД, потом уйдут пить кофе:)
5 июн 17, 08:22    [20538944]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
Corei3
Как только работа завершена, из таблицы удаляется. Мне нужно собрать инфу по простою пользователей.
Как можно собрать какую то инфу по пользователям, если в таблице нет данных, всё удаляется?
Вот вы хотите сделать отчёт, в таблице 0 записей, она пустая (все ушли с работы).
Как можно из пустой таблицы получить отчёт???
5 июн 17, 09:07    [20539042]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Corei3
Когда пользователь начинает работу, он появляется в таблице. Как только работа завершена, из таблицы удаляется.


О, такую таблицу можно увидеть в профайлере!
Кто - то её уже изобрёл.
5 июн 17, 09:18    [20539077]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Есть две таблицы: Used_Id - таблица с пользователями. User_In_Process - таблица со статусом пользователя (в работе), на текущий момент.

Как только пользователь начинает выполнять определенные транзакции, срабатывает процедура и происходит вставка в User_In_Process:

Выглядит это примерно так:

User_Id | Status | Time

Как только пользователь выполняет работу, запись в User_In_Process удаляется.
5 июн 17, 09:52    [20539188]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Триггер на вставке/удалении в userinprocess и пишите в свою таблицу логов всё что хотите.
5 июн 17, 11:51    [20539668]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
Можно включить CDC и настроить журналирование изменений для этой таблицы, при этом не будет вмешательства в логику работы.
5 июн 17, 12:03    [20539700]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Cammomile, собственно так и предполагалось. Проблема была в последующей корректной обработке данных.
5 июн 17, 13:54    [20540175]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Не вижу связи между триггерами и проблемой обработки данных. Может в реализуемой логике проблема?
5 июн 17, 14:05    [20540254]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Cammomile, написал скрипт через обычные соединения. Вроде работает.
5 июн 17, 15:04    [20540561]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Возможно кто-то подскажет как правильно написать через оконные функции?
5 июн 17, 15:04    [20540563]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Стоп, стоп, стоп. Тут уже какая-то каша. То у тебя "строка удаляется, не могу отследить", то "написал через обычные соединения", то тебе "оконные функции".

Где сбор статистики по удаляемым данным и где оконные функции?!
5 июн 17, 15:15    [20540607]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Cammomile, создал два триггера - на вставку и на удаление. Данные после срабатывания каждого триггера вставляю в новую таблицу. Процедура обрабатывает данные из таблицы и выдает конечный результат.

"Курил" форум, искал похожие примеры. Ниже, что получилось в итоге:

declare @First TABLE (UID int Not Null, DT DateTime Not Null, IsEnter bit Not Null);
declare @New TABLE (UID int Not Null, EnterDT DateTime Null, ExitDT DateTime Null);

insert @First
select UserID, DateTime, Active from User_Activity

insert @New
select UID, 
       max(case when IsEnter = 1 then dt end) as EnterDT,
       max(case when IsEnter = 0 then dt end) as ExitDT  
  from (
         select t0.*,
                (
                  select count(case 
                                 when t2.IsEnter <= t1.IsEnter 
                                      or
                                      t2.IsEnter is null
                                   then 1 
                               end
                              )
                    from @First t1
                    left join @First t2
                      on (select top 1 dt 
                            from @First t 
                           where t.uid = t1.uid and t.dt < t1.dt 
                           order by dt desc
                         ) = t2.dt
                     and t1.dt > t2.dt
                     and t1.uid = t2.uid
                   where t1.dt <= t0.dt
                     and t1.uid = t0.uid
                ) as grp_id
           from @First t0
       ) as v         
 group by uid, grp_id
 order by uid, coalesce(max(case when IsEnter = 1 then dt end),
                   max(case when IsEnter = 0 then dt end));


Далее селектом вывожу в отчет RRS
13 июн 17, 14:54    [20560703]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Знающим, подскажите, может хорошее учебное пособие есть, для того чтобы улучшить скилы по написанию подобных запросов? Буду признателен.

Спасибо всем!
13 июн 17, 15:08    [20560792]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
sql-ex.ru
13 июн 17, 15:18    [20560830]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
Cammomile, на sql-ex.ru, в справочнике, все на начальном уровне.
Упражнения я все решил по первому серту. Дальше, да, есть сложные задачки, но мне нужен менно справочник или книга, которая возможно поможет правильно мыслить для написания более сложных вещей...
13 июн 17, 15:37    [20560922]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Corei3
Cammomile, на sql-ex.ru, в справочнике, все на начальном уровне.
Упражнения я все решил по первому серту. Дальше, да, есть сложные задачки, но мне нужен менно справочник или книга, которая возможно поможет правильно мыслить для написания более сложных вещей...

Ицик Бен Ган
13 июн 17, 15:40    [20560932]     Ответить | Цитировать Сообщить модератору
 Re: Собрать информацию по простою пользователей...  [new]
Corei3
Member

Откуда:
Сообщений: 77
TaPaK, спасибо! Скачал. Вроде хорошие отзывы. Буду читать!
13 июн 17, 17:11    [20561291]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить