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

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

Ответить
Настройки темы
MSFT SQL Server - столкнулся с не правильным подсчетом записей при выполнения запроса.

Аватара для pingUIN

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


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

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


Изменения
Автор: pingUIN
Дата: 20-04-2013
Описание: Вопрос по доработке запрос
Здравствуйте.

Есть запрос который выбирает транзакции из БД за 15 минут и считает их кол-во, выводит процентное соотношение, описание по ошибке их код и собственно виновников торжества клиенты и их идентификаторы.

разбил я этот запрос на несколько фаз с использованием временных таблиц.
читать дальше »

Код: Выделить весь код
IF EXISTS(select * from tempdb..sysobjects where id = object_id('tempdb..#TEMP_PRC'))     DROP TABLE #TEMP_PRC;
IF EXISTS(select * from tempdb..sysobjects where id = object_id('tempdb..#TEMP'))     DROP TABLE #TEMP;
IF EXISTS(select * from tempdb..sysobjects where id = object_id('tempdb..#TEMP_1'))     DROP TABLE #TEMP_1;

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

declare @startTime dateTime
declare @endTime dateTime
declare @providerId bigint
--declare @cof float

set @endTime=getdate()
set @startTime=DATEADD(minute,-15,@endTime)
--set @startTime='2013-02-19 17:22:00'
--set @endTime='2013-02-19 21:08:00'

declare @percents table (oid int, percents float)
insert @percents values(173, 3.38)
insert @percents values(144, 2.8)
insert @percents values(200, 2.71)
insert @percents values(362, 4.4)

select  owner_id
        ,count(Case when trx.extended_code<>0 THEN 1 END)*100.0/(count(*))*1.0 as 'PRC',
        count(Case when trx.extended_code<>0 THEN 1 END) as 'counted'
INTO #TEMP_PRC
from jboss.dbo.trx trx WITH (NOLOCK, INDEX(IDX_START_CLASS_RESULT))
left join @percents p on p.oid=owner_id
where 
trx.started_at>@startTime and trx.finished_at<@endTime
and trx.trx_class_id=2
group by owner_id, p.percents
having 
  100.0
  *count(Case when trx.extended_code<>0 THEN 1 END)
  /isnull(nullif(count(*),0),1) > isnull(p.percents,0.1)

--Select * from #TEMP_PRC
select    owner_id
        ,extended_code
        ,sr.description
        ,count(*) as counted
INTO #TEMP
from jboss.dbo.trx trx WITH (NOLOCK, INDEX(IDX_START_CLASS_RESULT))
        inner join jboss.dbo.send_result_trx sr with (nolock) on sr.id=trx.id
where 
trx.started_at>@startTime and trx.finished_at<@endTime
and trx.trx_class_id=2
and owner_id in (Select owner_id From #TEMP_PRC )
group by owner_id, extended_code, sr.description

select owner_id
    ,sum(counted) as count_all
into #TEMP_1
from #TEMP
group by owner_id


insert into #jboss_monitor_temp
Select cp.display_name       ,t1.owner_id       ,extended_code       ,description       ,counted*100.0/count_all as precent       ,counted
FROM #temp_1 t1
inner join #temp t on t1.owner_id=t.owner_id
right outer join jboss_ds.dbo.provider cp with (nolock) ON t1.owner_id = cp.id 
where not extended_code=0
group by display_name, t1.owner_id, extended_code, description, counted*100.0/count_all, counted

insert into [jboss_monitor].[dbo].[jboss_monitor_]
select *
from #jboss_monitor_temp



Т.е. получается при работе процедуры, лог работы процедуры ложился в базу x_result_log, под логом может подразумеваться дата и время обращения к процедуре и/или действия которые были предприняты работой процедуры за определенное время(определяется датой этих действий).

читать дальше »
Код: Выделить весь код
USE [jboss]
GO
/****** Object:  StoredProcedure [dbo].[Jboss_monitor_test]    Script Date: 02/22/2013 12:23:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Jboss_monitor_test]
AS



=-=============================

В общем теперь столкнулся с проблемой, при выполнении этого куска кода
читать дальше »
Код: Выделить весь код
select  owner_id         ,
count(Case when trx.extended_code<>0 THEN 1 END)*100.0/(count(*))*1.0 as 'PRC',        
 count(Case when trx.extended_code<>0 THEN 1 END) as 'counted' 
INTO #TEMP_PRC 
from jboss.dbo.trx trx WITH (NOLOCK, INDEX(IDX_START_CLASS_RESULT)) 
left join @percents p on p.oid=owner_id 
where  trx.started_at>@startTime and trx.finished_at<@endTime and trx.trx_class_id=2 
group by owner_id, p.percents 
having    100.0   *count(Case when trx.extended_code<>0 THEN 1 END)   /isnull(nullif(count(*),0),1) > isnull(p.percents,0.1)  

--Select * from #TEMP_PRC 

select    owner_id         ,extended_code         ,sr.description         ,count(*) as counted 
INTO #TEMP 
from jboss.dbo.trx trx WITH (NOLOCK, INDEX(IDX_START_CLASS_RESULT))        
 inner join jboss.dbo.send_result_trx sr with (nolock) on sr.id=trx.id 
where  trx.started_at>@startTime and trx.finished_at<@endTime 
and trx.trx_class_id=2 
and owner_id in (Select owner_id From #TEMP_PRC ) 
group by owner_id, extended_code, sr.description  

select owner_id     ,sum(counted) as count_all 
into #TEMP_1 
from #TEMP group by owner_id


получаю некий коллапс с данными

id code status count
1 0 ok 8
1 11 error 56
1 69 error 56
1 1279 error 56

не могу понять почему по кодам ошибок получается одинаковое количество подсчитанных записей, хотя с кодом 0 все ок(это видимо из-за того, что при указании count я явно определил подсчет 0 кодов.

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


Отправлено: 11:38, 31-01-2013

 


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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Анализ соотношения размеров экранов и корпусов современных смартфонов OSZone News Новости информационных технологий 0 28-05-2012 06:30
Изменение соотношения разделов Alla65 Накопители (SSD, HDD, USB Flash) 3 13-03-2009 21:23
неправильное определение соотношения сторон при загрузки kalikanzaros Непонятные проблемы с Железом 15 10-01-2007 11:55
Подсчет трафика правил ipfw count... strejiok Общий по FreeBSD 7 05-06-2006 18:53
Можно ли использовать like в динам. запросе Leon71 Программирование и базы данных 1 11-08-2003 14:45




 
Переход