我正在以下查询中寻找替代 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 个引擎,下面仅显示一个。每月大约 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