Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Поиск отсутствующих данных по нескольким условиям. MSSQL 2008 R2

Ответить
Настройки темы
MSFT SQL Server - Поиск отсутствующих данных по нескольким условиям. MSSQL 2008 R2

Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить PM | Цитировать


Изменения
Автор: pingUIN
Дата: 20-07-2015
Здравствуйте уважаемые знатоки.


Возникла задача, но не совсем пока понимаю с какой стороны к ней подойти.


Есть БД, которая содержит в себе данные за последние сутки.

В этой БД есть информация по совершенной операции и клиенте, который ее проводил.(т.е. один клиент может проводить сколько угодно операций/транзакций)


Как следует подойти к процессу сбора статистики, если есть несколько условий, которые надо выполнить, а именно:


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 транзакций, а ввыходные чтобы порог был нулевым?
Не делал еще разбиения логики выполнения в зависимости от текущих условий.

-------
здесь был администратор 8)


Отправлено: 12:38, 20-07-2015

 

Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить 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
Может ли мне кто из знающих, если таковые имеются, пояснить момент с WITH(что делает функция понимаю), а вот селекты в ней, не совсем понятны.

К примеру рассмотреть если
Код: Выделить весь код
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))
что за код после VALUES, как его можно интерпретировать на человеческий язык если рассматривать логику ?

-------
здесь был администратор 8)


Отправлено: 11:09, 28-07-2015 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Поиск отсутствующих данных по нескольким условиям. MSSQL 2008 R2

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход