Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] SQLite: поместить результаты запроса в нужные поля таблицы

Ответить
Настройки темы
Прочие БД - [решено] SQLite: поместить результаты запроса в нужные поля таблицы

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Griboed0ff
Дата: 28-09-2021
Описание: Не указал, что ПК в таблице не один, а тысячи.
Доброго времени суток! Недавно познакомился с базой 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.

А вот дальше начинаются вопросы. Как создать таблицу в нужном виде, учитывая условия? Возможно прибегнуть к временным таблицам? Буду рад любой помощи!

Отправлено: 15:13, 24-09-2021

 

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
я имею в виду, что данное актуальное (!) представление можно в любой момент получить запросом. »
я помещаю данные в таблицу, чтобы потом экспортировать их в csv, я пока не умею экспортировать данные запроса сразу в таблицу csv..

Отправлено: 21:37, 27-09-2021 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
я пока не умею экспортировать данные запроса сразу в таблицу csv. »
Griboed0ff, используемый вами SQLiteStudio умеет в экспорт в csv БД, таблицы или запроса (Tools - Export).

Отправлено: 11:15, 28-09-2021 | #12


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
используемый вами SQLiteStudio умеет в экспорт в csv БД, таблицы или запроса (Tools - Export). »
SQLiteStudio использую только для удобства просмотра данных, все команды ввожу через консоль. В дальнейшем, если получится составить запрос в этой теме, команды будет вводить скрипт powershell или через триггер сделаю. То есть я сделаю запрос, поместив данные во временную таблицу, экспортирую csv, удалю временную таблицу.

Отправлено: 11:44, 28-09-2021 | #13


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Извините, я не правильно привел пример данных, указав там только один пк, но у меня информация в таблице с множеством разных пк и получить информацию нужно о всех, что содержаться в таблице, а не только для "name1". Я пробовал вставлять в запрос другие имена пк и ответы получаются правильными. Даже на данном этапе я могу с помощью powershell помещать в запросы нужные имена, например взяв ту же выборку из AD по аушкам. Или создам запрос в таблицу pc_users для выявления всех имен пк без повторений, а потом буду их поочередно запрашивать, то получится таблица, которую нужно, со всеми ПК и информацией о логине пользователей. Но думаю, что это невероятные костыли в плане запросов.

Отправлено: 12:41, 28-09-2021 | #14


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
у меня информация в таблице с множеством разных пк и получить информацию нужно о всех, что содержаться в таблице, а не только для "name1". »
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
Благодарности: 2

Профиль | Отправить PM | Цитировать


Это то, что нужно! Пойду разбираться в этом запросе, чтобы хотя бы понять где и что происходит, чтобы далее самому составлять запросы.

Отправлено: 17:49, 30-09-2021 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] SQLite: поместить результаты запроса в нужные поля таблицы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход