我需要在条形图中绘制具有开始时间和结束时间的事件。
表结构:
id:工作站的id
var_id:事件类型(过去,预测)
event_time:时间戳
value:事件(状态)附带的值
我需要的是chartStartTime和chartEndTime之间的event_time事件以及chartStartTime之前的第一个事件,当这个event_time是时,dosn无关紧要。
如何在一个SELECT中组合这个标准?
不要忘记性能,因为该表可以容纳数百万条记录!
我现在尝试的是首先在开始时间之前选择事件:
SELECT event_time, value FROM table
WHERE id = xy AND event_time < startTime ORDER BY event_time desc LIMIT 1
然后:
SELECT event_time, value FROM table
WHERE id = xy AND (var_id = past OR var_id = forecast)
AND event_time >= startTime AND event_time < endTime
ORDER BY event_time ASC
此查询位于while循环中,该循环是找到的工作站的结果集。 xy是工作站的id。
这给了我很多时间,因为我在sql中没有那么多的经验 我很感激你的帮助
表定义:
CREATE TABLE a_value(
id INTEGER DEFAULT '0',
var_id INTEGER DEFAULT '0',
event_time INTEGER DEFAULT '0',
value FLOAT DEFAULT '0',
PrimKeya_value
PrimKey2(id,var_id,event_time)
)
INDEX-DEFINITION:
CREATE INDEX aValueTimeFirst ON a_value (event_time)
我的实际查询:
select event_time, value_f from a_value use index (aValueTimeFirst)
where id = 5866 and var_id in (-350, -351)
and event_time >= (
select event_time from a_value where id = 5866 and event_time < 1484552880
order by event_time desc limit 1
) order by event_time asc
答案 0 :(得分:0)
您可以使用union来组合这两个查询结果:
(SELECT event_time, value FROM table
WHERE id = xy AND event_time < startTime ORDER BY event_time desc LIMIT 1)
union
(SELECT event_time, value FROM table
WHERE id = xy AND (var_id = past OR var_id = forecast)
AND event_time >= startTime AND event_time < endTime
ORDER BY event_time ASC)
你也可以用这个得到结果:
(SELECT event_time, value FROM table
WHERE id = xy AND (var_id = past OR var_id = forecast)
AND event_time >= (SELECT event_time FROM table
WHERE id = xy AND event_time < startTime ORDER BY event_time desc LIMIT 1)
AND event_time < endTime
ORDER BY event_time ASC)
点击此处union
查看更多关于工会的信息