powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество подключений за каждый день
34 сообщений из 34, показаны все 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
Количество подключений за каждый день
    #39456304
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЗабей на SQL. Получай на клиента голые данные, а там уже сам группируй в шахматке/массиве
или любых других имеющихся под рукой структурах.

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

У меня сложилось впечатление, что эта задача (ручная группировка) ему не по плечу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456312
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, я оба варианта прорабатываю. Сделал календарь, по отдельности SELECTы вашего варианта работают, вместе - "invalid column reference".
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456323
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovWildSeryСудя по всему, он так и собирается, получив "транспонированные" данные сперва.

У меня сложилось впечатление, что эта задача (ручная группировка) ему не по плечу.


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

Как же они работают, если я вместо одинарной кавычки двойные написал?
Литерал должен быть в одинарных.
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456388
Ramramm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, кавычки я исправлял. Он ругался на неизвестный тип данных - "Data type unknown".
...
Рейтинг: 0 / 0
Количество подключений за каждый день
    #39456467
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramramm,

Вот такой вариант для начала:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select ConnectionType "Тип соединения", sum(c01) "01", sum(c02) "02", sum(c03) "03", sum(c04) "04", sum(c05) "05",
                                        sum(c06) "06", sum(c07) "07", sum(c08) "08", sum(c09) "09", sum(c10) "10"
from (
        select a.ConnectionType ConnectionType,
               iif(extract(day from a.ConnectionDate)=1,1,0) c01,
               iif(extract(day from a.ConnectionDate)=2,1,0) c02,
               iif(extract(day from a.ConnectionDate)=3,1,0) c03,
               iif(extract(day from a.ConnectionDate)=4,1,0) c04,
               iif(extract(day from a.ConnectionDate)=5,1,0) c05,
               iif(extract(day from a.ConnectionDate)=6,1,0) c06,
               iif(extract(day from a.ConnectionDate)=7,1,0) c07,
               iif(extract(day from a.ConnectionDate)=8,1,0) c08,
               iif(extract(day from a.ConnectionDate)=9,1,0) c09,
               iif(extract(day from a.ConnectionDate )=10,1,0) c10
        from cn a
        where a.ConnectionDate between '01.03.2017' and '10.03.2017'
    )
group by 1


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

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


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