1

以下のクエリで TOP または LIMIT 句に代わるものを探しています。エンジンのステータスが以前の値から変化したときに出力したい。最初と最後に別のテーブルを結合して、月の最初の値と月の最後の値も取得できるようにしますが、簡単にするために、これは以下に示していません。基本的に、列の出力が必要ですレポートで、ステータスが行ごとに変化したとき。

SELECT A.pointidlong 
       , A.pointtime 
       , A.value 
FROM   enginestatus A 
WHERE  A.pointidlong = 'engine1' 
   AND A.pointtime > Now() - 30 
   AND A.value <> (SELECT TOP 1 B.value 
                   FROM   enginestatus B 
                   WHERE  B.pointidlong = A.pointidlong 
                      AND B.pointtime < A.pointtime 
                      AND B.pointtime > Now() - 30 
                   ORDER  BY B.pointtime DESC) 
ORDER  BY pointidlong 
         , pointtime 

小さなデータセットを以下に示します。データ セットには 20 個のエンジンが含まれており、以下に示すのは 1 つだけです。1 か月あたり約 180K 行。

engine,        PointTime,         status
'engine1', '2016-02-14 15:30:00', 'RUNNING'
'engine1', '2016-02-14 15:36:00', 'RUNNING'
'engine1', '2016-02-14 15:51:00', 'RUNNING'
'engine1', '2016-02-14 16:06:00', 'STOPPED'
'engine1', '2016-02-14 16:20:00', 'RUNNING'
'engine1', '2016-02-14 16:35:00', 'RUNNING'
'engine1', '2016-02-14 16:51:00', 'RUNNING'
'engine1', '2016-02-14 17:05:00', 'STOPPED'
'engine1', '2016-02-14 17:20:00', 'RUNNING'
'engine1', '2016-02-14 17:35:00', 'STOPPED'
'engine1', '2016-02-14 17:50:00', 'RUNNING'
'engine1', '2016-02-14 18:05:00', 'RUNNING'
'engine1', '2016-02-14 18:19:00', 'STOPPED'
'engine1', '2016-02-14 18:36:00', 'RUNNING'
'engine1', '2016-02-14 18:51:00', 'RUNNING'

データベースは、以下にリンクされている OpenAccess SQL から実行されます。TOP は使用できますが、サブクエリ、派生テーブル、またはユニオンと組み合わせて使用​​することはできません。私が知る限り、LIMIT はサポートされていません。

http://media.datadirect.com/download/docs/openaccess/sdk/openaccess_sql.pdf

4

1 に答える 1