下表包含预测数据行。预测每小时到达两次。该预测将包含7天的数据,每天24小时。我想要一种有效的方法来查询表格,并且只能从14:10获得预测(预测来自:每小时10和45)并且仅在预测之后的那天(而不是另外6天)
CREATE TABLE
forecast_table
(
forecast_timestamp TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL,
forecast_date DATE NOT NULL,
forecast_hour INTEGER NOT NULL,
number_value NUMERIC NOT NULL,
PRIMARY KEY (forecast_timestamp, forecast_date , forecast_hour )
);
例如,我想了解2014年1月1日至2014年2月1日至2014年1月1日期间每天的所有24小时预报。这些必须是前一天的14:10预测。
我觉得必须有一种有效的方法来查询这个表,并且每天只需要24小时。
答案 0 :(得分:0)
您所寻找的并不明显,主要是因为您的表格中有很多日期和时间,并且不清楚数据实际上是什么样的或结果应该是什么看起来像。
您可以使用all kinds of date and time functions。
这应该列出所有预测,时间为14:10,发生在2014年1月,当发布时,是为了预测未来不到1天的日期。有大约十几种方式来写这个,你需要四处寻找好的方法。如果你能找到一种方法来编写它,使你的字段不在函数中,那将是最好的。
SELECT *
FROM forecast_table
WHERE EXTRACT(HOUR FROM forecast_timestamp) = 14
AND EXTRACT(MINUTE FROM forecast_timestamp) = 10
AND forecast_timestamp > forecast_date - interval '1 day'
AND date_trunc('month', forecast_date) = timestamp '2014-01-01 00:00:00'
我无法判断您是否希望forecast_hours
字段计入您希望应用于forecast_timestamp
的24小时限制。如果你这样做:
SELECT *
FROM forecast_table
WHERE EXTRACT(HOUR FROM forecast_timestamp) = 14
AND EXTRACT(MINUTE FROM forecast_timestamp) = 10
AND forecast_timestamp > (forecast_date + (forecast_hour * '1 hour'::interval)) - interval '1 day'
AND date_trunc('month', forecast_date) = timestamp '2014-01-01 00:00:00'
确实,forecast_hour
字段确实应该是数据类型interval hour
而不是int
。