2016-09-27 66 views
1

我试图从数据库中的所有标签上的WonderWare历史数据库中获取数据。已经有一个包含所有标签的表格,所以我想用一个子查询来选择所有的标签名称。这个子查询出现错误w.r.t。在WonderWare中使用子查询来选择所有标签

我的SQL语句:

/****** 

I want to be able to select: 
    - all columns 
    - for all tags <-- I'm getting an error here, trying to use a subquery 
    - between two time stamps 
    - at a specified resolution 

******/ 

SELECT * 
FROM 
    Runtime.[dbo].AnalogHistory 
WHERE 
    TagName IN (
     SELECT DISTINCT TagName 
     FROM 
      Runtime.dbo.Tag 
    ) 
AND 
    DateTime >= '2016-01-01 00:00' 
AND 
    DateTime < '2016-01-01 00:30' 
AND 
    wwResolution = 5000 
AND 
    wwRetrievalMode = 'Average' 
AND 
    wwTimeStampRule = 'Start' 

我收到的错误是:

OLE DB provider "INSQL" for linked server "INSQL" returned message "History queries must contain at least one valid tagname". 

我的猜测是指没有被正确地执行它。

我使用OPENQUERY也试过,但后来我得到相关子查询无法辨别关于标签表“模式”信息其他错误:

OLE DB provider "INSQL" for linked server "INSQL" returned message "Failed to retrieve schema information for object 'Tag'". 

这是摘录更改:

TagName IN (SELECT * FROM OPENQUERY(INSQL, 
    'SELECT DISTINCT TagName 
    FROM 
     Runtime.dbo.Tag') 
) 

回答

0

尝试:

SELECT DISTINCT aa.TagName FROM (
SELECT DateTime, TagName, Value 
FROM History 
WHERE DateTime >= '2016-01-01 00:00' 
AND DateTime <= '2016-01-01 00:30' 
AND wwResolution = 5000 
AND wwRetrievalMode = 'Average' 
AND wwTimeStampRule = 'Start' 
) aa 
1

Historian服务器是不是一个正常的SQL Server数据库。这是从INSQL链接服务器获取数据的历史视图。 INSQL有一些特殊的规则,记录在HistorianConcepts.pdf中。

SELECT 
    * 
FROM 
    Runtime.dbo.Tag t 
INNER REMOTE JOIN 
    Runtime.dbo.AnalogHistory h 
ON 
    t.TagName = h.TagName 
WHERE 
    DateTime >= '2016-01-01 00:00' 
AND 
    DateTime < '2016-01-01 00:30' 
AND 
    wwResolution = 5000 
AND 
    wwRetrievalMode = 'Average' 
AND 
    wwTimeStampRule = 'Start'