Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество подключений за каждый день / 25 сообщений из 34, страница 1 из 2
19.05.2017, 11:25
    #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
19.05.2017, 11:33
    #39455972
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
Ramramm, здесь можно найти как в сообщении на форуме оформить таблицу.
...
Рейтинг: 0 / 0
19.05.2017, 11:36
    #39455977
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
DDL в студию!
...
Рейтинг: 0 / 0
19.05.2017, 11:37
    #39455978
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
Ramramm,

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

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

А как Вы догадались? В посте ни слова про это.
На самом деле, если так, то скорее на клиенте такую таблицу легче сделать.
...
Рейтинг: 0 / 0
19.05.2017, 12:31
    #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
19.05.2017, 12:34
    #39456031
Ramramm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
KreatorXXIГраур Станислав,

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

Да, произвольное. Количество типов и пользователей варьируется.
...
Рейтинг: 0 / 0
19.05.2017, 12:45
    #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
19.05.2017, 12:53
    #39456055
Ramramm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
WildSery, спасибо. Календаря нет, ща буду курить в его направлении.
...
Рейтинг: 0 / 0
19.05.2017, 13:41
    #39456113
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
Ramramm,

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

Ну, либо физически в виде таблицы его создать и заполнять.
Но это уже если действительно постоянно используется, для табелей, банковских дней и прочей календарной лабуды.
Вот попытка охватить всё.
...
Рейтинг: 0 / 0
19.05.2017, 13:47
    #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
19.05.2017, 13:56
    #39456128
Ramramm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
KreatorXXI, я имею ввиду, что повернутый результат меня тоже устроит. Я не буду его транспонировать и т.п. Поэтому, так как Вы предлагаете, даты по горизонтали пустить, меня тоже устраивает в виде конечного результата.
...
Рейтинг: 0 / 0
19.05.2017, 14:02
    #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
19.05.2017, 14:03
    #39456135
Ramramm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
WildSery, ага, спасибо, второй вариант уже гугл мне показал.
...
Рейтинг: 0 / 0
19.05.2017, 14:49
    #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
19.05.2017, 15:27
    #39456236
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество подключений за каждый день
Ramramm,

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

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


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

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

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

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


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