pingUIN
20-07-2015, 12:38
Здравствуйте уважаемые знатоки.
Возникла задача, но не совсем пока понимаю с какой стороны к ней подойти.
Есть БД, которая содержит в себе данные за последние сутки.
В этой БД есть информация по совершенной операции и клиенте, который ее проводил.(т.е. один клиент может проводить сколько угодно операций/транзакций)
Как следует подойти к процессу сбора статистики, если есть несколько условий, которые надо выполнить, а именно:
1. сканируется таблица clients, где присутствуют 4 значения
имя клиента
ID клиента
Порог срабатывания по имеющимся данным(т.е. если установлено 40, то в случае если операций было выполнено меньше 40 или ни одной, то нас этот клиент интересует)
статус мониторинга(True - мониторим, False - не мониторим)
2. идет обращение к таблице out_trn в которой происходит поиск транзакций к примеру за час, поиск осуществляется по клиентам(их ID) из п.1, у кого статус мониторинга = TRUE.
3. По выбранным клиентам(за кем осуществляется мониторинг), собранная статистика собирается в таблицу monitor_table
Если по клиенту порог срабатывания 3.../...7 операции, а у клиента их нет(т.е. 0 или же ниже порога), надо создать запись в monitor_table
столбец 1 | столбец 2
КлиентААА | транзакций нет
КлиентБББ | 6 транзакций
В случае с поиском существующих значений, проблем нет, но вот поиск отсутствующих значений и преобразование пустоты(отсутствия результата в некую строку) есть проблемы ввиду не достаточных познаний.
Написал пробный вариант, чтобы посмотреть на результат отбора
select cp.mbox_id, COUNT(ot.trx_id)
from [Trxhist].[dbo].[out_trx] ot
LEFT OUTER JOIN [Trxhist].[dbo].[cprov_mbox] cp
ON cp.mbox_id = ot.cprov_mbox_id
where ot.stored_at BETWEEN '2015-07-17 03:23:39.000' and '2015-07-17 06:23:39.000'
GROUP BY cp.mbox_id
На выходе получил
mbox_id (No column name)
184 8368
188 2992
213 10984
235 27784
241 43
265 3901
294 2353
358 77.........................
Нулевых результатов не обнаружил :(
================================================
Немного поработал с запросом, получилось выводить 0ые результаты.
USE Trxhist
select cp.mbox_id, COUNT(ot.trx_id)
from
Trxhist.dbo.[cprov_mbox] AS cp
LEFT OUTER JOIN
[Trxhist].[dbo].out_trx AS ot
ON (ot.cprov_mbox_id = cp.mbox_id)
and ot.stored_at BETWEEN '2015-07-17 03:23:39.000' and '2015-07-17 06:23:39.000'
GROUP BY cp.mbox_id
having cp.mbox_id in (246)
===============================
Можно ли каким-нибудь образом сделать разный порог срабатывания, скажем в будние дни от 10 транзакций, а ввыходные чтобы порог был нулевым?
Не делал еще разбиения логики выполнения в зависимости от текущих условий.
Возникла задача, но не совсем пока понимаю с какой стороны к ней подойти.
Есть БД, которая содержит в себе данные за последние сутки.
В этой БД есть информация по совершенной операции и клиенте, который ее проводил.(т.е. один клиент может проводить сколько угодно операций/транзакций)
Как следует подойти к процессу сбора статистики, если есть несколько условий, которые надо выполнить, а именно:
1. сканируется таблица clients, где присутствуют 4 значения
имя клиента
ID клиента
Порог срабатывания по имеющимся данным(т.е. если установлено 40, то в случае если операций было выполнено меньше 40 или ни одной, то нас этот клиент интересует)
статус мониторинга(True - мониторим, False - не мониторим)
2. идет обращение к таблице out_trn в которой происходит поиск транзакций к примеру за час, поиск осуществляется по клиентам(их ID) из п.1, у кого статус мониторинга = TRUE.
3. По выбранным клиентам(за кем осуществляется мониторинг), собранная статистика собирается в таблицу monitor_table
Если по клиенту порог срабатывания 3.../...7 операции, а у клиента их нет(т.е. 0 или же ниже порога), надо создать запись в monitor_table
столбец 1 | столбец 2
КлиентААА | транзакций нет
КлиентБББ | 6 транзакций
В случае с поиском существующих значений, проблем нет, но вот поиск отсутствующих значений и преобразование пустоты(отсутствия результата в некую строку) есть проблемы ввиду не достаточных познаний.
Написал пробный вариант, чтобы посмотреть на результат отбора
select cp.mbox_id, COUNT(ot.trx_id)
from [Trxhist].[dbo].[out_trx] ot
LEFT OUTER JOIN [Trxhist].[dbo].[cprov_mbox] cp
ON cp.mbox_id = ot.cprov_mbox_id
where ot.stored_at BETWEEN '2015-07-17 03:23:39.000' and '2015-07-17 06:23:39.000'
GROUP BY cp.mbox_id
На выходе получил
mbox_id (No column name)
184 8368
188 2992
213 10984
235 27784
241 43
265 3901
294 2353
358 77.........................
Нулевых результатов не обнаружил :(
================================================
Немного поработал с запросом, получилось выводить 0ые результаты.
USE Trxhist
select cp.mbox_id, COUNT(ot.trx_id)
from
Trxhist.dbo.[cprov_mbox] AS cp
LEFT OUTER JOIN
[Trxhist].[dbo].out_trx AS ot
ON (ot.cprov_mbox_id = cp.mbox_id)
and ot.stored_at BETWEEN '2015-07-17 03:23:39.000' and '2015-07-17 06:23:39.000'
GROUP BY cp.mbox_id
having cp.mbox_id in (246)
===============================
Можно ли каким-нибудь образом сделать разный порог срабатывания, скажем в будние дни от 10 транзакций, а ввыходные чтобы порог был нулевым?
Не делал еще разбиения логики выполнения в зависимости от текущих условий.