powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество подключений за каждый день
25 сообщений из 34, страница 1 из 2
Количество подключений за каждый день
    #39455967
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица Cn(ServerName, ConnectionType, UserName, ConnectionDate, DisconnectionDate), в которую заносятся подключения с типом ConnectionType к серверу ServerName пользователя UserName в день ConnectionDate. Когда пользователь отключается дата отключения заносится в DisconnectionDate. Не могу сообразить, как вывести таблицу по "Серверу1", в строках которой будут даты за каждый день, например марта, а в столбцах количество активных подключений на этот день, количество по типам подключения, количество по пользователям.
То есть:
ДатаОбщееТип1Тип2Тип3Юзер1Юзер201.03.17532231053002.03.17511812212526
И тд
Запрос за один день - дело понятное, а вот в таком виде - не знаю.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39455972
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm, здесь можно найти как в сообщении на форуме оформить таблицу.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39455977
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDL в студию!
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39455978
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

А что понятно за один день? Не вижу разницы - один день, не один.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39455992
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIRamramm,
А что понятно за один день? Не вижу разницы - один день, не один.

Ему произвольное кол-во столбцов нужно в запросе.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456008
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, спасибо, но отредактировать уже не могу. Буду знать.
Модератор: С этим помогу.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456024
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граур Станислав,

А как Вы догадались? В посте ни слова про это.
На самом деле, если так, то скорее на клиенте такую таблицу легче сделать.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456028
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,я пока могу получить очень отдаленный от нужного результат. на самом деле не критично, если таблица будет транспонирована. То есть результат, в котором столбцы и строки поменяны местами тоже норм.

Я умею выводить за день как раз транспонированную и только по одному критерию:
Код: plsql
1.
2.
3.
4.
SELECT ConnectionType, COUNT(*) 
FROM Cn
WHERE (ConnectionDate<='19.05.2017' AND DisconnectionDate>'19.05.2017') AND ServerName = 'Server1' 
GROUP BY ConnectionType 


Результат будет такой :
Type1 20Type2 25Type3 14
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456031
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIГраур Станислав,

А как Вы догадались? В посте ни слова про это.
На самом деле, если так, то скорее на клиенте такую таблицу легче сделать.

Да, произвольное. Количество типов и пользователей варьируется.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456046
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

Тебе поможет производственный календарь. Надеюсь, у тебя есть такой в системе?
Если нет, то придётся его создать, например, виртуально, процедурой.

Пусть на выходе будет Calendar (cDate)
Тогда примерно так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select c.cDate,
       "Общее" ConnectionType,
       count(*) ConnectionCount
  from Calendar c
       left join Cn Cn on (Cn.ConnectionDate <= c.cDate and Cn.DisconnectionDate > c.cDate)
  where c.cDate between :BeginDate and :EndDate
  group by c.cDate

union all

select c.cDate,
       Cn.ConnectionType,
       count(*) ConnectionCount
  from Calendar c
       left join Cn Cn on (Cn.ConnectionDate <= c.cDate and Cn.DisconnectionDate > c.cDate)
  where c.cDate between :BeginDate and :EndDate
  group by c.cDate, Cn.ConnectionType



Ниже можешь добавить в разрезе пользователей по аналогии.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456055
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, спасибо. Календаря нет, ща буду курить в его направлении.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456113
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

Вот здесь можно процедурку подсмотреть.

Ну, либо физически в виде таблицы его создать и заполнять.
Но это уже если действительно постоянно используется, для табелей, банковских дней и прочей календарной лабуды.
Вот попытка охватить всё.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456116
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

В вашем случае типа вот так:
Код: sql
1.
2.
3.
4.
SELECT ConnectionDate, ConnectionType,  COUNT(*) 
FROM Cn
WHERE (ConnectionDate<='19.05.2017' AND DisconnectionDate>'19.05.2017') AND ServerName = 'Server1' 
GROUP BY ConnectionDate, ConnectionType 


Транспонирование - отдельная проблема. Файербёрдом. боюсь, просто не решить. Если тип соединения ещё можно как-то обработать (думаю количество типов - известно и относительно мало), то с пользователями непонятно как быть.
В качестве раздумий - может имеет смысл даты по горизонтали пустить. Скажем, если рассматривается месяц, то отличие только в конце месяца, уже можно уцепиться.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456128
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI, я имею ввиду, что повернутый результат меня тоже устроит. Я не буду его транспонировать и т.п. Поэтому, так как Вы предлагаете, даты по горизонтали пустить, меня тоже устраивает в виде конечного результата.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456133
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIRamramm,

В вашем случае типа вот так:
Код: sql
1.
2.
3.
4.
SELECT ConnectionDate, ConnectionType,  COUNT(*) 
FROM Cn
WHERE (ConnectionDate<='19.05.2017' AND DisconnectionDate>'19.05.2017') AND ServerName = 'Server1' 
GROUP BY ConnectionDate, ConnectionType 


Понял, но это также на одну дату. Пока пробую с календарем. А если даты по горизонтали, то как мне получить множество столбцов? Проще ли этот вариант, чем с календарем? ибо пока я не представляю, как мне диапазон дат в SELECT засунуть.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456135
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, ага, спасибо, второй вариант уже гугл мне показал.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456186
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIRamramm,

В вашем случае типа вот так:
Код: sql
1.
2.
3.
4.
SELECT ConnectionDate, ConnectionType,  COUNT(*) 
FROM Cn
WHERE (ConnectionDate<='19.05.2017' AND DisconnectionDate>'19.05.2017') AND ServerName = 'Server1' 
GROUP BY ConnectionDate, ConnectionType 


Нет, этот вариант и за одну дату выводит не то что нужно. Пользователи и типы должны быть в одном столбце(или строке) , а вот втором столбце(или строке) - количество. А тут SELECT из уже в 2 столбца выводит.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456236
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

Вы меня не поняли. Для начала нужно получить количество коннектов за день по каждому типу (Допустим, не рассматриваем для начала пользователей). Мой запрос это делает. А вторым шагом нужен второй запрос, который из этого запроса правильно просуммирует нужные данные. В FB это конструкция "select ... from select ..." или можно использовать CTE.
Использование в данном случае union all приведёт только к увеличению времени запроса. Грубо говоря вы будете несколько раз проходить всю таблицу только с разными фильтрами. Смысла нет.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456270
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Может, и быстрее, но это ещё не факт.
Вот только SELECT ConnectionDate - неправильно. Она может быть позавчерашней.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456276
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,
Я же привёл образец. ТС что хочет видеть в таблице? ConnectionDate? Тогда в фильтре условие типа:
Код: sql
1.
WHERE (ConnectionDate between '01.05.2017' AND '31.05.2017') AND ServerName = 'Server1' 


Я же говорю - нет полного описания задачи. Приходиться догадываться.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456281
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

И, конечно, вопрос. В таблице "Дата". Что это? ConnectionDate или DisconnectionDate?
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456286
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI, просто календарные даты. Например, с 01.03.17 по 30.03.17. Даты, в которых не было изменений соединений, можно отпустить, но это не обязательно.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456295
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забей на SQL. Получай на клиента голые данные, а там уже сам группируй в шахматке/массиве
или любых других имеющихся под рукой структурах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456300
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

Т.е. ConnectionDate. A ConnectionType что это? В отдельной таблице лежит? Или какой-то ограниченный набор? Вы бы привели кусок данных Вашей таблицы.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456303
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Судя по всему, он так и собирается, получив "транспонированные" данные сперва.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество подключений за каждый день
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]