24.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Скрипт поиска периодов срабатывания датчика
logoffДата: Вторник, 15.11.2011, 15:00 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Скрипт выводит время начала-окончания срабатывания датчика.
На выходе таблице, где для каждого ТС указан номер датчика указанного типа

Code

USE [BN]  
set nocount on  
GO  
declare   @PeriodFrom smalldatetime,  
      @PeriodTo smalldatetime,@GroupID int  
          

select @PeriodFrom='01-11-2011 00:00',@PeriodTo='16-11-2011 00:00'  
set @GroupID=null -- по всем группам
--set @GroupID=104 -- по конкретной группе
      Create table #TempData  
       (ObjectID int,              -- ID машины  
        CarGarNum varchar(256),    -- гаражный номер машины  
        ObjectGosNum varchar(20),  
        sensor_on datetime, -- начало работы сенсора  
        sensor_off datetime, -- завершение работы сенсора  
        num int)           -- его номер  

      Declare  
         @CarID int,     
         @CarGarNum varchar(256),  
         @ObjectGosNum varchar(20),  
         @TeleTime datetime,  
         @Digit_Sens_Num int,  
         @Flags int,  
         @IsActive bit,  
         @num int,  
         @time_sensor_on datetime,  
         @time_sensor_off datetime  
          
      if @GroupID is not null  
        Declare CarCursor cursor local fast_forward for  
        select a.ObjectID, a.ObjectGarNum, a.ObjectGosNum, c.MarkCarName  from FLEET_Object a  
        left join FLEET_ObjectRelation b on a.ObjectID = b.ObjectID  
        left join FLEET_MarkCar c on a.MarkCarID = c.MarkCarID  
        where b.ObjectGroupeID = @GroupID and a.ObjectActive = 1  
        else  
        Declare CarCursor cursor local fast_forward for  
        select a.ObjectID, a.ObjectGarNum, a.ObjectGosNum from FLEET_Object a  
        left join FLEET_MarkCar c on a.MarkCarID = c.MarkCarID  
        where ObjectActive = 1  
      Open CarCursor  
        while 0=0  
          begin  
            Fetch from CarCursor into @CarID, @CarGarNum, @ObjectGosNum  
            if @@Fetch_Status!=0 break  
            Set @IsActive = 0  

            Declare CoordCurs cursor local fast_forward for     
            select c.tele_time, c.Digit_Sens_Num, c.Flags, d.num     
            from SYS_DEV_ArchiveData c with(index(IX2_SYS_DEV_ArchiveData))  
            left join SYS_DEV_Sensor d on c.device_id = d.device_id  
            where     
              d.SensorClassificationId = 11 -- фильтр по классу датчика "Подъем кузова"
              and c.ObjectID = @CarID  
              and c.tele_time between @PeriodFrom and @PeriodTo  
            order by c.tele_time  
            select @time_sensor_on =null, @time_sensor_off =null  
            Set @IsActive = 0  
            Open CoordCurs  
              while 0=0  
                begin  
                  Fetch from CoordCurs into @TeleTime, @Digit_Sens_Num, @Flags, @num  
                  if @@Fetch_Status!=0 break  
                  if dbo.FLEET_IsSensorActive(@num, @Digit_Sens_Num, @Flags) = 1 -- датчик активен  
                    begin  
                       if @IsActive = 0 -- датчик был не активен  
                            begin       
                    Set @IsActive = 1  
                    select @time_sensor_on=@TeleTime,@time_sensor_off =null  
                            end  
                    end else  -- датчик не активен  
                    if @IsActive = 1  
                      begin  
         insert into #TempData (ObjectID,CarGarNum,ObjectGosNum,sensor_on , sensor_off,num)  
         values  (@CarID,@CarGarNum, @ObjectGosNum, @time_sensor_on,@TeleTime,@num)  
                        Set @IsActive = 0        
                        select @time_sensor_on=null      
                      end        
                end       
            Close CoordCurs  
            Deallocate CoordCurs       
          end  
      Close CarCursor  
      Deallocate CarCursor       
           
      select *, DATEDIFF (SS,sensor_on,sensor_off)as sec from #TempData     
      --where  DATEDIFF (SS,sensor_on,sensor_off)<=5  
      order by CarGarNum  

где
USE [BN] -- название базы данных КиберФлит
select @PeriodFrom='01-11-2011 00:00',@PeriodTo='16-11-2011 00:00' -- указание периода выборки с по
d.SensorClassificationId = 11 -- фильтр по классу датчика "Подъем кузова" (см таблицу dbo.SYS_DEV_SensorClassification)

Внимание! Если последний период срабатывания датчика прибора оканчивается позже, чем период выборки, то данный период не будет включен в результат
 
  • Страница 1 из 1
  • 1
Поиск:

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