Griboed0ff
24-09-2021, 15:13
Доброго времени суток! Недавно познакомился с базой sqlite, мне так понравилось, что я решил хранить и накапливать некоторые данные именно в базе. Получать эти данные я хотел бы сразу в нужном виде, но я пока не могу составлять сложные запросы.
Дано: в таблицу собираются данные о факте логона пользователя на пк. Информация: имя пк, логин пользователя, дата время, тип логона.
Компьютеров в таблице тысячи, пример только для одного из них (см.причину исправления сообщения).
WorkstationName TargetUserName TimeCreated logontype
name1 user1 21.09.2021 10:15 2
name1 user1 22.09.2021 14:19 2
name1 user1 21.09.2021 12:01 2
name1 user2 21.09.2021 15:06 2
name1 user2 22.09.2021 10:21 2
name1 user2 22.09.2021 15:01 2
name1 user2 22.09.2021 15:18 2
name1 user2 21.09.2021 15:59 2
name1 user2 22.09.2021 12:05 2
name1 user2 21.09.2021 10:32 2
name1 user2 21.09.2021 15:32 2
name1 user2 22.09.2021 10:24 2
name1 user2 21.09.2021 17:12 2
name1 user2 22.09.2021 15:51 2
name1 user3 21.09.2021 10:31 2
name1 user3 22.09.2021 10:33 2
name1 user3 22.09.2021 15:36 2
name1 user3 21.09.2021 14:11 2
name1 user3 22.09.2021 14:08 2
name1 user3 21.09.2021 10:32 2
name1 user3 22.09.2021 10:33 2
name1 user3 21.09.2021 12:07 2
name1 user3 22.09.2021 12:41 2
name1 user4 21.09.2021 14:44 2
name1 user4 22.09.2021 13:15 2
Задача: посчитать сколько раз вообще логинились на одном пк из спика, посчитать количество логонов на данном пк для каждого юзера, создать таблицу где поместим все эти данные в одну строку. Если пользователей одного пк больше чем 3, то оставить только 3 наибольших по кол-ву входов. Если пользователи имеют одинаковое кол-во входов, то выбрать по ближайшей дате логона. Учет вести только логоны не старше 100 дней, используя столбец даты времени. Все это для каждого ПК в таблице.
WorkstationName all logon user 1 user 1 logon user 2 user 2 logon user 3 user 3 logon
name1 26 user2 11 user3 9 user1 3
создать табицу из запроса могу:
CREATE TABLE IF NOT EXISTS users_result AS
посчитать сколько логонов всего для одного ПК могу:
select WorkstationName, Count(*) from pc_users group by WorkstationName, WorkstationName;
ответ на запрос:
U240-3;2
U240-4;1
U240-5;1
U240-6;2
U240-7;2
посчитать сколько логонов для каждого из пользователей могу:
select WorkstationName, TargetUserName, Count(*) from test group by WorkstationName, TargetUserName, TargetUserName;
ответ на запрос:
U431-2;U431;3
U431-3;U431;2
U431-2;U431;2
U431-4;U431;3
Отфильтровать записи младше 100 дней, скорее всего можно будет через Where.
А вот дальше начинаются вопросы. Как создать таблицу в нужном виде, учитывая условия? Возможно прибегнуть к временным таблицам? Буду рад любой помощи!
Дано: в таблицу собираются данные о факте логона пользователя на пк. Информация: имя пк, логин пользователя, дата время, тип логона.
Компьютеров в таблице тысячи, пример только для одного из них (см.причину исправления сообщения).
WorkstationName TargetUserName TimeCreated logontype
name1 user1 21.09.2021 10:15 2
name1 user1 22.09.2021 14:19 2
name1 user1 21.09.2021 12:01 2
name1 user2 21.09.2021 15:06 2
name1 user2 22.09.2021 10:21 2
name1 user2 22.09.2021 15:01 2
name1 user2 22.09.2021 15:18 2
name1 user2 21.09.2021 15:59 2
name1 user2 22.09.2021 12:05 2
name1 user2 21.09.2021 10:32 2
name1 user2 21.09.2021 15:32 2
name1 user2 22.09.2021 10:24 2
name1 user2 21.09.2021 17:12 2
name1 user2 22.09.2021 15:51 2
name1 user3 21.09.2021 10:31 2
name1 user3 22.09.2021 10:33 2
name1 user3 22.09.2021 15:36 2
name1 user3 21.09.2021 14:11 2
name1 user3 22.09.2021 14:08 2
name1 user3 21.09.2021 10:32 2
name1 user3 22.09.2021 10:33 2
name1 user3 21.09.2021 12:07 2
name1 user3 22.09.2021 12:41 2
name1 user4 21.09.2021 14:44 2
name1 user4 22.09.2021 13:15 2
Задача: посчитать сколько раз вообще логинились на одном пк из спика, посчитать количество логонов на данном пк для каждого юзера, создать таблицу где поместим все эти данные в одну строку. Если пользователей одного пк больше чем 3, то оставить только 3 наибольших по кол-ву входов. Если пользователи имеют одинаковое кол-во входов, то выбрать по ближайшей дате логона. Учет вести только логоны не старше 100 дней, используя столбец даты времени. Все это для каждого ПК в таблице.
WorkstationName all logon user 1 user 1 logon user 2 user 2 logon user 3 user 3 logon
name1 26 user2 11 user3 9 user1 3
создать табицу из запроса могу:
CREATE TABLE IF NOT EXISTS users_result AS
посчитать сколько логонов всего для одного ПК могу:
select WorkstationName, Count(*) from pc_users group by WorkstationName, WorkstationName;
ответ на запрос:
U240-3;2
U240-4;1
U240-5;1
U240-6;2
U240-7;2
посчитать сколько логонов для каждого из пользователей могу:
select WorkstationName, TargetUserName, Count(*) from test group by WorkstationName, TargetUserName, TargetUserName;
ответ на запрос:
U431-2;U431;3
U431-3;U431;2
U431-2;U431;2
U431-4;U431;3
Отфильтровать записи младше 100 дней, скорее всего можно будет через Where.
А вот дальше начинаются вопросы. Как создать таблицу в нужном виде, учитывая условия? Возможно прибегнуть к временным таблицам? Буду рад любой помощи!