22.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Скрипт выборки истории данных от прибора
logoffДата: Вторник, 20.12.2011, 10:55 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Для среды MSDE или старше
Code

use bn
set dateformat dmy

declare @start datetime, @stop datetime
declare @ObjectID int
select @ObjectID=(select objectid from bn.dbo.FLEET_Object as o where o.ObjectGarNum like '%415%' and o.ObjectActive=1)

select @start='20/12/2011 01:00:00', @stop='20/12/2011 08:00:00'
declare @t table (type_data varchar(16),tele_time datetime,objectid int, device_code varchar(16), long float,
lat float, valid int, speed int, direction int, digit_sens_num varchar(300),   
analog_data varchar (300),server_time datetime,transfer_time datetime)
insert into @t

select 'position' type_data,ad.tele_time,ad.objectid, device_code, long,lat, valid, speed, direction, ad.digit_sens_num,   
ad.analog_data,ad.server_time,ad.transfer_time from bn.dbo.SYS_DEV_ArchiveData as ad
where ad.ObjectID=@ObjectID and tele_time between @start and @stop
union   
select 'DUT' type_data, ad.tele_time,ad.ObjectID,null as device_code, lon,lat,null,speed,direction,sens_num,   
sens_value,null,null
from bn.dbo.FLEET_AnalogData as AD
where ad.ObjectID=@ObjectID and tele_time between @start and @stop
union
select 'command',oc.DateWrite,oc.ObjectID,dev_code,null,null,null,null,null,oc.Command,oc.answer,oc.DateAnswer,
null from bn.dbo.FLEET_OutCome as OC
where oc.ObjectID=@ObjectID and oc.DateWrite between @start and @stop

select * from @t order by tele_time


где o.ObjectGarNum like '%415%' - фильтр на гаражный номер, содержащий в себе 415 (для примера)
USE BN - имя базы данных флита
select @start='20/12/2011 01:00:00', @stop='20/12/2011 08:00:00' -- период выборки данных с по

на выходе таблица, содержащия данные о перемещении ТС (см. описание таблицы sys_dev_Archivedata), данных от аналогового датчика (таблица AnalogDat), и история отправки команд (OutCom)
Причем, вся история отсортирована в порядке tele_time, что позволяет получить достаточно полную картину данных - как они происходили.
Обычно используется для отправки данных из выборки в москву совместно с логами TCPGate

сохраняйте таблицу в Excel с заголовками, используйте фильтры
 
logoffДата: Среда, 06.06.2012, 13:25 | Сообщение # 2
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
версия 2 - добавлен вывод битовых данных при помощи доп функции
Code


use bn  
set dateformat dmy  

declare @start datetime, @stop datetime  
declare @ObjectID int  
select @ObjectID=(select objectid from bn.dbo.FLEET_Object as o where o.ObjectGarNum like '%720ма%' and o.ObjectActive=1)  

select @start='06/06/2012 11:00:00', @stop='06/06/2012 14:00:00'  
declare @t table (type_data varchar(16),tele_time datetime,objectid int, device_code varchar(16), long float,  
lat float, valid int, speed int, direction int, digit_sens_num varchar(300), digit_sens_bits varchar(50),   
analog_data varchar (300),server_time datetime,transfer_time datetime,flags int, flags_bit varchar(60))  
insert into @t  

select 'position' type_data,ad.tele_time,ad.objectid, device_code, long,lat, valid, speed, direction, ad.digit_sens_num, (bn_patp_dob.dbo.ConvertToBase(ad.digit_sens_num, 2)),   
ad.analog_data,ad.server_time,ad.transfer_time,ad.flags,(bn_patp_dob.dbo.ConvertToBase(ad.flags, 2))
  from bn.dbo.SYS_DEV_ArchiveData as ad  
where ad.ObjectID=@ObjectID and tele_time between @start and @stop  
union    
select 'DUT' type_data, ad.tele_time,ad.ObjectID,null as device_code, lon,lat,null,speed,direction,sens_num,null,    
sens_value,null,null,null,null
from bn.dbo.FLEET_AnalogData as AD  
where ad.ObjectID=@ObjectID and tele_time between @start and @stop  
union  
select 'command',oc.DateWrite,oc.ObjectID,dev_code,null,null,null,null,null,null,oc.Command,oc.answer,oc.DateAnswer,
null,null,null from bn.dbo.FLEET_OutCome as OC  
where oc.ObjectID=@ObjectID and oc.DateWrite between @start and @stop  

select * from @t order by tele_time  


для ее работы требуется функция
Code

USE [bn_patp_dob]
GO

/****** Object:  UserDefinedFunction [dbo].[ConvertToBase]    Script Date: 06/06/2012 13:22:00 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- http://stackoverflow.com/questions/127116/sql-server-convert-integer-to-binary-string
-- =============================================
CREATE FUNCTION [dbo].[ConvertToBase]
(
     @value AS BIGINT,
     @base AS INT
) RETURNS VARCHAR(MAX) AS BEGIN

     -- some variables
     DECLARE @characters CHAR(36),
             @result VARCHAR(MAX);

     -- the encoding string and the default result
     SELECT @characters = '0123456789abcdefghijklmnopqrstuvwxyz',
            @result = '';

     -- make sure it's something we can encode.  you can't have
     -- base 1, but if we extended the length of our @character
     -- string, we could have greater than base 36
     IF @value < 0 OR @base < 2 OR @base > 36 RETURN NULL;

     -- until the value is completely converted, get the modulus
     -- of the value and prepend it to the result string.  then
     -- devide the value by the base and truncate the remainder
     WHILE @value > 0
         SELECT @result = SUBSTRING(@characters, @value % @base + 1, 1) + @result,
                @value = @value / @base;

     -- return our results
     RETURN @result;

END

GO

 
  • Страница 1 из 1
  • 1
Поиск:

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