Цитата vad
Если Flag=4 то значит состояние стоянка, 5 - в движении.
флаг битовый, равенство проверять нельзя
нужно делать побитовое сравнение оператором &
по таблице currentdata можно определенить
flags&1=0 - стоянка (зеленый), flags&1<>0 - движение
flags&4=0 - черный ящик (синий), flags&4<>0 - нормальные данные
нет глонасс определяется по valid=0 (желтый) , ну и по датчику - но это сложнее
с отсутствием данных - только сравнением последней координаты с текущим временем (коричневый).
примерно так
Код
/****** Скрипт для команды SelectTopNRows из среды SSMS ******/
SELECT TOP 1000
[device_id]
,[device_code]
,[tele_time]
,
[flags],case
when flags&1=0 -- стоянка
then
case when (getdate()-cd.tele_time)>(cast('1900-01-01 00:00:00.000' as datetime)+cast(d.opt_int2 as float)/86400)
then 'потеря связи' else '' end
else
case when getdate()-cd.tele_time>cast('1900-01-01 00:00:00.000' as datetime)+cast(d.opt_int1 as float)/86400 then 'потеря связи' else '' end
end
,case
when flags&1=0 -- стоянка
then 'стоянка'
else ''
end
FROM [BN].[dbo].[SYS_DEV_CurrentData] as CD
inner join [BN].[dbo].[SYS_DEV_Device] as D on d.id=CD.device_id
а вот с тревожным сообщением (красный цвет) - надо делать уже выборку с [FLEET_Events] c фильтром where [WorkOffDateTime]is null
примерно так
Код
SELECT
[IDObject]FROM [BN].[dbo].[FLEET_Events]
where [WorkOffDateTime]is null
group by
[IDObject]
на выходе список ObjectID (идентификаторов по таблице [FLEET_Object]) для которых есть необработанные сообщения
осталось это все свести в один запрос вам