24.04.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум (скрипты, вопросы...) » CyberFleet » Скрипты для CyberFleet, CrossPoint » проверка правильности занесения тарировки (скрипт проверяет нет ли пропусков,)
проверка правильности занесения тарировки
logoffДата: Вторник, 11.10.2011, 18:34 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
для среды MSDE
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
       


Проверяется, что в тарировночной таблице нет пропусков, нет пересечений данных
на выходе таблица с списком проблемных датчиков для проверки
 
JSДата: Понедельник, 14.01.2013, 09:41 | Сообщение # 2
Москва
Группа: Проверенные
Сообщений: 33
Репутация: 2
Статус: Offline
Зачёт, очень полезно!
только имеет смысл в последней выборке добавить номер датчика(s.num), ибо сейчас несколько датчиков уже норма,
и избавиться от удалённых датчиков(where d.deviceactive=1 and s.sensoractive =1), да и в самой выборке удалённые датчики не нужны .
 
logoffДата: Понедельник, 14.01.2013, 10:05 | Сообщение # 3
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
согласен со всеми замечаниями. Можете привести текст исправленного скрипта?
 
JSДата: Понедельник, 14.01.2013, 10:15 | Сообщение # 4
Москва
Группа: Проверенные
Сообщений: 33
Репутация: 2
Статус: Offline
У меня получилось вот так, только колонки в конце перетасовал.
Код

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  
       d.code as 'Номер АТ', s.num as 'Номер Датчика', mintarval as 'Значение датчика с ошибкой ',  
       o.ObjectGarNum'Гаражный номер',o.ObjectGosNum as 'Гос номер' 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  and s.sensoractive =1
 
logoffДата: Понедельник, 14.01.2013, 10:20 | Сообщение # 5
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Спасибо!
 
Форум (скрипты, вопросы...) » CyberFleet » Скрипты для CyberFleet, CrossPoint » проверка правильности занесения тарировки (скрипт проверяет нет ли пропусков,)
  • Страница 1 из 1
  • 1
Поиск:

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