28.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Проверка избыточности занесения тарировки
logoffДата: Пятница, 21.01.2011, 14:51 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Скрипт выводит значения двухстоящих рядом тарировок для датчиков уровня топлива лежащих на графике тарировки на одной линии, а значит одно из них можно удалить, что пусть незначительно но увеличит скорость работы со флитом.
Скрипт для среды: MS SQL DE
Code

/****** Сценарий для команды SelectTopNRows среды SSMS  ******/
declare @t table (idsensor int, mintarval float)
  declare @MinValue_Real float
       ,@MaxValue_Real float
       ,@MinValue_Tar float
       ,@MaxValue_Tar float
        
    declare @lastMinValue_Real float
       ,@lastMaxValue_Real float
       ,@lastMinValue_Tar float
       ,@lastMaxValue_Tar float
        
   declare cur cursor local for  
   select distinct idsensor from  [BN].[dbo].[FLEET_AnalogTarirovka]
   declare @idsensor int
   open cur
   fetch next from cur into @idsensor
   while @@fetch_status=0 begin
  declare cur2 cursor local  FORWARD_ONLY  for  
  select [MinValue_Real]
       ,[MaxValue_Real]
       ,[MinValue_Tar]
       ,[MaxValue_Tar] from [BN].[dbo].[FLEET_AnalogTarirovka]
       where [IDSensor]=@idsensor
       order by [MinValue_Real]
   select @lastMinValue_Real=null,@lastMaxValue_Real=null,@lastMinValue_Tar=null,@lastMaxValue_Tar=null
       
  open cur2  
       fetch next from cur2 into @MinValue_Real,@MaxValue_Real,@MinValue_Tar,@MaxValue_Tar
       while @@fetch_status=0 begin
   if @lastMinValue_Real is not null
    begin
     if @lastMaxValue_Real<>@MinValue_Real or @lastMaxValue_Tar<>@MinValue_Tar begin
      insert into  @t  
      values (@idsensor,@MinValue_Real)
print @idsensor
print @lastMaxValue_Real
print @MinValue_Real
print @lastMaxValue_Tar
print @MaxValue_Tar  
     end
      
    end
   select @lastMinValue_Real=@MinValue_Real,@lastMaxValue_Real=@MaxValue_Real,@lastMinValue_Tar=@MinValue_Tar,@lastMaxValue_Tar=@MaxValue_Tar
   fetch next from cur2 into @MinValue_Real,@MaxValue_Real,@MinValue_Tar,@MaxValue_Tar
       end
        
     close cur2
   deallocate cur2
   fetch next from cur into @idsensor
        
   end
   close cur
   deallocate cur
    
   select s.sensoractive, mintarval as error_on_str_min_tar,
   d.code,o.ObjectGarNum,o.ObjectGosNum from @t as t
   inner join bn.dbo.SYS_DEV_Sensor as s on s.id=t.idsensor
   inner join bn.dbo.SYS_DEV_Device as d on d.id=s.device_id
   left join bn.dbo.FLEET_Object as O on O.Device_ID=d.id
   where d.deviceactive=1
    


на выходе таблица, где в колонках "Тарировка" и "Литры" указаны рядом стоящие значения, для которых будет получен один и тот же угол наклона тарировки. Соотвественно, одно из данных рядом стоящих значений - лишнее. его можно удалить, изменив показания другого.
 
logoffДата: Среда, 23.02.2011, 22:06 | Сообщение # 2
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Скрипт для среды: MSDE
Code

use [BN] -- имя базы данных  
go

select d.code, s.description as Датчик  
--,AT.[IDRec]  
,cast(tar.[MinValue_Real] as varchar(10))+' - '+cast(tar.[MaxValue_Real] as varchar(10))+'='+  
cast(AT.[MinValue_Real] as varchar(10))+' - '+cast(AT.[MaxValue_Real] as varchar(10)) as Тарировка  
,cast(tar.[MinValue_Tar] as varchar(10))+' - '+cast(tar.[MaxValue_Tar] as varchar(10))+'='+  
cast(AT.[MinValue_Tar] as varchar(10))+' - '+cast(AT.[MaxValue_Tar] as varchar(10))+' л.' as Литры  
--,AT.[IDSensor]  
,(AT.[MaxValue_Tar]-AT.[MinValue_Tar])/(AT.[MaxValue_Real]-AT.[MinValue_Real]) as k  
from [dbo].[FLEET_AnalogTarirovka] as AT  
inner join  
(SELECT [IDRec]  
,[MinValue_Real]  
,[MaxValue_Real]  
,[IDSensor]  
,[MaxValue_Tar]  
,[MinValue_Tar]  
,([MaxValue_Tar]-[MinValue_Tar])/([MaxValue_Real]-[MinValue_Real]) as k  

FROM [dbo].[FLEET_AnalogTarirovka]  
--where [IDSensor]=619  
--order by [IDSensor],MinValue_Real  
) as tar on tar.idsensor=at.idsensor and at.[MinValue_Real]=tar.[MaxValue_Real]  
inner join [dbo].SYS_DEV_Sensor as S on AT.[IDSensor]=S.id  
inner join dbo.SYS_DEV_Device as D on d.id=s.device_id  
where tar.k=(AT.[MaxValue_Tar]-AT.[MinValue_Tar])/(AT.[MaxValue_Real]-AT.[MinValue_Real])  
 
  • Страница 1 из 1
  • 1
Поиск:

LogOff © 2024
Сайт создан в системе uCoz Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС