|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] SQLite: поместить результаты запроса в нужные поля таблицы |
|
Прочие БД - [решено] SQLite: поместить результаты запроса в нужные поля таблицы
|
Старожил Сообщения: 211 |
Профиль | Отправить PM | Цитировать
Доброго времени суток! Недавно познакомился с базой 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 дней, используя столбец даты времени. Все это для каждого ПК в таблице. пример желаемого результата из примера выше
создать табицу из запроса могу: посчитать сколько логонов всего для одного ПК могу: ответ на запрос: посчитать сколько логонов для каждого из пользователей могу: select WorkstationName, TargetUserName, Count(*) from test group by WorkstationName, TargetUserName, TargetUserName; Отфильтровать записи младше 100 дней, скорее всего можно будет через Where. А вот дальше начинаются вопросы. Как создать таблицу в нужном виде, учитывая условия? Возможно прибегнуть к временным таблицам? Буду рад любой помощи! |
|
Отправлено: 15:13, 24-09-2021 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 21:37, 27-09-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
|
|
Отправлено: 11:15, 28-09-2021 | #12 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
|
|
Отправлено: 11:44, 28-09-2021 | #13 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Извините, я не правильно привел пример данных, указав там только один пк, но у меня информация в таблице с множеством разных пк и получить информацию нужно о всех, что содержаться в таблице, а не только для "name1". Я пробовал вставлять в запрос другие имена пк и ответы получаются правильными. Даже на данном этапе я могу с помощью powershell помещать в запросы нужные имена, например взяв ту же выборку из AD по аушкам. Или создам запрос в таблицу pc_users для выявления всех имен пк без повторений, а потом буду их поочередно запрашивать, то получится таблица, которую нужно, со всеми ПК и информацией о логине пользователей. Но думаю, что это невероятные костыли в плане запросов.
|
Отправлено: 12:41, 28-09-2021 | #14 |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
SELECT *
FROM (
SELECT WorkstationName,
sum(user_logon_count) OVER win AS all_logon,
nth_value(TargetUserName, 1) OVER win AS "user 1",
nth_value(user_logon_count, 1) OVER win AS "user 1 logon",
nth_value(TargetUserName, 2) OVER win AS "user 2",
nth_value(user_logon_count, 2) OVER win AS "user 2 logon",
nth_value(TargetUserName, 3) OVER win AS "user 3",
nth_value(user_logon_count, 3) OVER win AS "user 3 logon"
FROM (
SELECT *, row_number() OVER (
PARTITION BY WorkstationName
ORDER BY user_logon_count DESC, time_created DESC) AS rn
FROM (
SELECT *,
printf('%s-%s-%s %s:00',
substr(TimeCreated, 7, 4),
substr(TimeCreated, 4, 2),
substr(TimeCreated, 1, 2),
substr(TimeCreated, 12)
) AS time_created,
count(1) OVER (PARTITION BY WorkstationName, TargetUserName) AS user_logon_count
FROM pc_users
WHERE time_created > datetime('now', '-100 days')
ORDER BY WorkstationName, user_logon_count DESC, time_created DESC
) GROUP BY WorkstationName, TargetUserName
) WHERE rn <= 3
WINDOW win AS (PARTITION BY WorkstationName)
) GROUP BY WorkstationName
|
|
Отправлено: 16:39, 29-09-2021 | #15 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Это то, что нужно! Пойду разбираться в этом запросе, чтобы хотя бы понять где и что происходит, чтобы далее самому составлять запросы.
|
Отправлено: 17:49, 30-09-2021 | #16 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MSFT SQL Server - [решено] Некоторые поля одной таблицы синкать с полями другой таблицы | uptk | Программирование и базы данных | 5 | 01-09-2014 20:29 | |
MySQL - Тип данных для поля ключевого поля | Ali002 | Программирование и базы данных | 8 | 22-04-2014 22:09 | |
Удаление записей таблицы по данным другой таблицы | xNiSSaNx | Вебмастеру | 4 | 02-08-2013 21:58 | |
Установка - [решено] Обновления от Microsoft: нужные, не нужные. Польза или вред. | flev45 | Microsoft Windows 7 | 18 | 29-09-2010 13:05 | |
MSFT SQL Server - результаты запроса в виде текстового файла и его обработка | minusodin | Программирование и базы данных | 7 | 30-03-2010 15:48 |
|