|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Поиск отсутствующих данных по нескольким условиям. MSSQL 2008 R2 |
|
MSFT SQL Server - Поиск отсутствующих данных по нескольким условиям. MSSQL 2008 R2
|
Пользователь Сообщения: 137 |
Профиль | Отправить PM | Цитировать
Здравствуйте уважаемые знатоки.
Возникла задача, но не совсем пока понимаю с какой стороны к ней подойти. Есть БД, которая содержит в себе данные за последние сутки. В этой БД есть информация по совершенной операции и клиенте, который ее проводил.(т.е. один клиент может проводить сколько угодно операций/транзакций) Как следует подойти к процессу сбора статистики, если есть несколько условий, которые надо выполнить, а именно: 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 ......................... Нулевых результатов не обнаружил ================================================ Немного поработал с запросом, получилось выводить 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 транзакций, а ввыходные чтобы порог был нулевым? Не делал еще разбиения логики выполнения в зависимости от текущих условий. |
|
------- Отправлено: 12:38, 20-07-2015 |
Пользователь Сообщения: 137
|
Профиль | Отправить PM | Цитировать Немного дополню вопрос, как можно доработать запрос, чтобы связка IDклиента и порог срабатывания/отбора записей из табл(2 столбца получается) брались из отдельной таблицы?
К примеру если указывать ID клиента и кол-во транзакций, я бы отобразил это так(для конкретного клиента) 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) and COUNT(ot.trx_id) < 50 having cp.mbox_id in (246) and COUNT(ot.trx_id) < 50 Можно скажем значения cp.mbox_id & кол-во транзакций(в моем случае 50), брать из другой таблицы и при этом использовать значения более чем для одного IDклиента? К примеру для клиента с ID (ID)233 (кол-во)40 (ID)333 (кол-во)700 (ID)123 (кол-во)95 Т.е. идея такая, чтобы использовать данные из таблицы в запросе при его отработке и выборки только интересующих данных |
Последний раз редактировалось pingUIN, 27-07-2015 в 17:53. Отправлено: 11:19, 27-07-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 137
|
Профиль | Отправить PM | Цитировать Я тут на соседних форумах поспрашал, со мной поделились кодом по теме задачи
;with cprov_mbox as ( select * from( values (1),(2),(3) )values_cprov_mbox(mbox_id)) ,out_trx as ( select * from( values (1,1,cast('20150717 05:30' as datetime)), (2,2,'20150717 05:30') )values_out_trx(trx_id, cprov_mbox_id, stored_at)) ,AnotherTable as ( select * from( values (1,2),(2,1),(3,2) )values_AnotherTable(mbox_id, qty)) select cp.mbox_id, COUNT(ot.trx_id) qty from AnotherTable p join cprov_mbox cp on cp.mbox_id=p.mbox_id LEFT JOIN out_trx AS ot ON (ot.cprov_mbox_id = cp.mbox_id) and ot.stored_at BETWEEN '20150717 03:23:39' and '20150717 06:23:39' GROUP BY cp.mbox_id, p.qty having COUNT(ot.trx_id) < p.qty К примеру рассмотреть если что за код после VALUES, как его можно интерпретировать на человеческий язык если рассматривать логику ? |
------- Отправлено: 11:09, 28-07-2015 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2008 R2 - Полная резервная копия базы данных Microsoft SQL Server 2008 R2 | ITKAZ | Windows Server 2008/2008 R2 | 8 | 02-06-2015 14:52 | |
CMD/BAT - Поиск и удаление строк в файле по сложным условиям | i7allia | Скриптовые языки администрирования Windows | 2 | 30-10-2013 17:06 | |
Поиск и замена по нескольким ключевым словам одновременно | OsNewbie | Вебмастеру | 1 | 02-03-2013 13:50 | |
CMD/BAT - [решено] Поиск и удаление строки в файле по сложным условиям | m0nkrus | Скриптовые языки администрирования Windows | 9 | 26-06-2011 10:37 | |
MSFT SQL Server - [решено] Поиск в базе MSSQL по ключевым словам | PERMYAK | Программирование и базы данных | 3 | 22-04-2010 16:36 |
|