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
|
|
| |