Conhecendo a Estrutura do Banco de Dados do ScadaBR

Para quem precisa entender como os dados são gravados fisicamente no ScadaBR, existe um banco de dados que pode ser o Derby (por padrão) ou MySQL instalado e configurado após a instalação
do ScadaBR 1.2 ou anteriores…
Conheça a Estrutura dos Bancos de Dados
Segue abaixo a estrutura de tabelas do banco de dados do ScadaBR:

Aviso: Após a imagem, existe algumas considerações…

Você pode obter por exemplo toda a cadeia, DataSource/DataPoint e valor usando uma das Queryes SQL abaixo:

SELECT ds.name as DataSource_Name, ds.xid as DataSource_Xid,
dp.xid as DataPoint_Xid, pv.pointValue as PointValue
from pointValues pv, dataPoints dp, dataSources ds
where pv.dataPointId = dp.id and dp.dataSourceId = ds.id
and pv.id = 1

ou

dp.xid as DataPoint_Xid, pv.pointValue as PointValue,
pva.textPointValueShort as PointValue_Text
from pointValueAnnotations pva, pointValues pv,
dataPoints dp, dataSources ds
where pva.pointValueId=pv.id and pv.dataPointId = dp.id
and dp.dataSourceId = ds.id and pva.pointValueId=1;

Fonte dos items:

https://www.theseus.fi/bitstream/handle/10024/6857/Juhasz_Bela.pdf;jsessionid=36CBC17C9CC9F582EFFB7BCB50EB8B07?sequence=2

Sobre o campo ts

Como podem notar, os valores dos datapoints ficam na tabela pointValues; o campo ts presente é a data/hora que o dado foi salvo. ele é um inteiroLongo que representa o número de miliSegundos desde 1/1/1970
Para transformar em Dia hora, basta pegar o valor de ts e dividir por 1000 para remover os miliSegundos e então temos um TimeStamp conhecido como UnixTime. (Número de segundos desde 1/jan/1970).

no Mysql é possível dividir ts /1000 e fazer a conversão para Dia e hora usando a função
FROM_UNIXTIME(ts/1000)

Contudo, se voce utiliza o derby, não há função direta para converter UnixTime para hora por exemplo:
Neste caso, se baseie nessa Query:

select id, datapointid, pointvalue,ts,
date(((ts/1000)/86400)+1) as Data,
1970+((ts/1000)/31536000) as ano,
((ts/1000)/86400) as dias_Desde_1_Jan_1970,
 { fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, mod(ts, 1000) * 1000000,
         { fn TIMESTAMPADD(SQL_TSI_SECOND, ts / 1000,
           TIMESTAMP('1970-01-01-00.00.00.000000'))
         })    
       }
 from pointvalues fetch first 1 rows only

Para obter um dado e seu tempo com Mysql basta se basear nesse exemplo basico:

SELECT dp.pointvalue as valor, dt.xid, 
FROM_UNIXTIME(ts/1000), 
dp.dataPointId as zid,  
dt.id as did 
FROM  pointValues  dp, dataPoints dt  
WHERE dt.id=dp.dataPointId and xid='DP_12345'  
ORDER by ts DESC limit 1
1 curtida

Baita post, Wagner!

Eu to começando a mexer com BD agora e tava boiando na interpretação dos dados a serem consultados, foi muito esclarecedor. Valeu!