SQL Нахождение максимального значения столбца в диапазоне, определяемом состоянием другого столбца

В данных ниже Event1 представляет конец производственного цикла. Событие 2 происходит в течение процента циклов. Мне было интересно, можно ли вытянуть время окончания цикла (когда 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 ответа

В стандартной базе данных SQL я бы охарактеризовал периоды по концу (когда происходит событие1), а не по началу периода. Данные содержат конец, но не начало.

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. Это должно быть одинаковое значение для всего в цикле. Внешний запрос просто группируется по этому значению.

Wonderware по умолчанию использует стандартную редакцию SQL-сервера (плюс некоторые необычные дополнительные материалы по истории), поэтому вы сможете использовать T-SQL, чтобы получить то, что вы хотите.

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

Другие вопросы по тегам