SQL Server 2012基于一个表和附加信息过滤结果

时间:2015-01-20 20:08:31

标签: sql

我一直在尝试在stackoverflow上搜索类似的查询来修改以获得我需要的东西,但我似乎无法做到正确。我希望这里有人可以提供帮助。

我有两个表位于两个不同的数据库中。两个数据库都配置在同一台服务器上。表1称为“DiscreteLive”并位于数据库“运行时”中。表2称为“v_DiscreteHistory”,位于数据库'WWALMDB'中。

他们有以下字段

DiscreteLive

标记名(类型字符串)

值(类型整数 - >只能是1或0)

'v_DiscreteHistory'

标记名(类型字符串)

Value(类型String - >只能为false)

EventStamp(类型日期时间)

描述(类型字符串)

'DiscreteLive'表只能有一个唯一的标记名行。外部软件将覆盖每个标记名的相应值字段。它基本上显示了系统的实时值。示例如下所示。例如,您永远不会在此表中找到两次Device1.Commfail。

Device1.Commfail
Device1.Auto
Device1.Man
Device2.Commfail
Device2.Auto
Device2.Man
Device3.Commfail
Device3.Auto
Device3.Man
Device4.commfail
Device4.Auto
Device4.Man
Device5.Commfail
Device5.Auto
Device5.Man

'v_DiscreteHistory'表是特定标记的历史记录。可以有多个相同标签的条目及其Description和EventStamp(偶数发生的时间)。

我要做的是过滤掉'DiscreteLive'表,只显示标记名为%.CommFail且值为1的标记值。然后我想获取该初始值的结果从'v_DiscreteHistory'查询并附加初始查询中这些标记的最新EventStamp和Description。

不确定是否可以这样做。如果您需要更多说明,请告诉我。

1 个答案:

答案 0 :(得分:0)

SQL Server:这可能就是你要找的东西

SELECT 
    D.TagName
   ,D.Value
   ,V.Tagname
   ,V.Value,V.EventStamp
   ,V.Description 
   ,MAX(V.EventStamp) AS 'LatestDate'
FROM 
    SERVER.Runtime.dbo.DiscreteHistory D
INNER JOIN 
    SERVER.WWALMDB.dbo.v_DiscreteHistory V
    ON 
    D.Tagname = V.Tagname
WHERE 
    D.Value = 1 
    AND 
    V.Value LIKE '%.CommFail'
GROUP BY
    D.TagName
   ,D.Value
   ,V.Tagname
   ,V.Value,V.EventStamp
   ,V.Description