我有一个巨大的表格,其中包含来自工业机器的监控数据。该表有 30 个所谓的参数列,典型的查询每次选择 2 - 7 个。诸如图表和状态表之类的东西是从结果中计算出来的。大多数计算要求除了给定时间范围内的值(主数据)之外,还需要知道给定时间范围(前数据)之前参数的最新非空值。
我目前使用查询每个参数执行的预数据。这不像我想要的那样有效,因为它向数据库引入了n 个查询,其中n是计算所需的参数数量。是否有可能通过单个查询获取预数据(有关当前查询的示例,请参见下文)?
数据前查询示例(也为fuel_cons、pwr_on 和idle_counter 执行):
SELECT
alert_f335
FROM
signal_value SIGV
,machine M /*Using old join since this is actually a Hibernate query*/
WHERE
M.serialNumber = 'R451902'
AND SIGV.machineId = M.id
AND SIGV.time = (
SELECT
MAX(TMP.time)
FROM
signal_value TMP
WHERE
TMP.machineId = M.id
AND TMP.time < 1370044800000 /*2013-06-01 00:00:00*/
AND TMP.alert_f335 IS NOT NULL
)
ORDER BY
SIGV.time ASC
主数据查询示例(可以):
SELECT
alert_f335
,fuel_cons
,pwr_on
,idle_counter
FROM
machine M
INNER JOIN
signal_value SIGV
ON M.id = SIGV.machineId
WHERE
M.serialNumber = 'R451902'
AND SIGV.time >= 1370044800000 /*2013-06-01 00:00:00*/
AND SIGV.time <= 1371340799000 /*2013-06-15 23:59:59*/
AND (alert_f335 IS NOT NULL OR fuel_cons IS NOT NULL OR pwr_on IS NOT NULL OR idle_counter IS NOT NULL)
ORDER BY
SIGV.time ASC
机器表有 2 个有趣的列:id 和序列号。signal_value 除了参数列之外还有 2 个有趣的列:machineId、time (millis)。