SQL在由其他列的状态定义的范围内查找列的最大值

时间:2012-12-05 16:07:01

标签: sql historian wonderware

在下面的数据中,Event1表示制造周期的结束。 Event2在一定百分比的周期内发生。我想知道是否有可能在此周期内拉出循环时间结束(当Event1返回0时)和Event2的最大值(0或1)。这两个值都是二进制的。

    DateTime          Event1        Event2
    12/5/2012 07:00      1             0
    12/5/2012 07:01      0             0
    12/5/2012 07:45      1             0
    12/5/2012 07:46      0             0
    12/5/2012 07:50      0             1
    12/5/2012 07:54      0             0
    12/5/2012 08:30      1             0
    12/5/2012 08:31      0             0


    DateTime          max(Event2)
    12/5/2012 07:46      0
    12/5/2012 08:31      1

我正在使用WonderWare历史数据库,因此查询中有一些独特的选项。以下是我用来查找周期时间结束的内容。

SELECT * FROM OPENQUERY(INSQL, "SELECT DateTime
FROM WideHistory
WHERE wwRetrievalMode = 'Delta'
AND Event1 = 1
AND wwEdgeDetection = 'TRAILING'
AND wwVersion = 'Latest'
AND DateTime >= '20121205 07:00'
AND DateTime <= '20121205 09:00'")

有没有办法使用此查询的结果生成其他查询的DateTime限制?

2 个答案:

答案 0 :(得分:0)

在标准SQL数据库中,我将通过 end (当event1发生时)而不是句点的开头来表征句点。数据包含结尾,但不是开头。

select EndOfCycleDateTime, count(*) as NumEvents,
       max(Event2) as maxEvent2
from (select t.*,
             (select min(datetime) from t t2 where t2.datetime >= t.datetime and t2.event1 = 1
             ) as EndOfCycleDateTime
      from t
     ) t
group by EndOfCycleDateTime

这是使用子查询来查找下一次event1为1时。这应该是循环中所有内容的相同值。外部查询只按此值分组。

答案 1 :(得分:0)

Wonderware默认使用SQL Server标准版(加上历史记录中的一些额外的东西),所以你应该能够使用T-SQL来获得你想要的东西。

http://wonderwarenorth.com.s138768.gridserver.com/support/TechTip_1004_WonderwareHistorian&DifferentRetrievalMethods.pdf