- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想查找按小时和天分割的历史实际风和预报风。
我对一天中的某个时间有多个预报。我的第二天交易的交易截止日期为东部标准时间上午 10 点,因此我希望在此之前的最新预测与该小时的实际风在同一条线上。
使事情复杂化的是时间戳是格林威治标准时间,比美国东部标准时间早 5 小时。
WITH
forecast_prep AS (
SELECT
date_trunc('day', (foretime - interval '5 hours')) :: DATE AS Foredate,
extract(HOUR FROM (foretime - interval '5 hours')) + 1 AS foreHE,
lat,
lon,
max(windspeed) as forecast,
max(as_of) - interval '5 hours' AS as_of
FROM weather.forecast
WHERE date_trunc('day', foretime) :: DATE - as_of >= INTERVAL '9 hours'
GROUP BY Foredate, foreHE, lat, lon
),
tmp AS (
SELECT
meso.station,
meso.lat,
meso.lon,
(meso.timestmp - interval '5 hours') as timestmp,
date_trunc('day', (meso.timestmp - interval '5 hours')) :: DATE AS Date,
extract(HOUR FROM (meso.timestmp - interval '5 hours')) + 1 AS HE,
CAST(AVG(meso.windspd) AS NUMERIC(19, 2)) AS Actual
FROM weather.meso
GROUP BY station, lat, lon, timestmp, Date, HE
)
SELECT
tmp.station, tmp.Date, tmp.HE, tmp.Actual, forecast_prep.forecast, forecast_prep.as_of
FROM tmp
INNER JOIN forecast_prep ON (
tmp.lat = forecast_prep.lat
AND tmp.lon = forecast_prep.lon
AND tmp.Date = forecast_prep.Foredate
AND tmp.HE = forecast_prep.foreHE
)
WHERE
(tmp.timestmp BETWEEN '2016-02-01' AND '2016-02-02')
AND (tmp.station = 'KSBN')
GROUP BY
tmp.station, tmp.Date, tmp.HE, forecast_prep.forecast, forecast_prep.as_of, tmp.Actual
ORDER BY tmp.Date, tmp.HE ASC;
下面是带有相关示例数据的完整表结构。
CREATE SCHEMA weather
CREATE TABLE weather.forecast
(
foretime timestamp without time zone NOT NULL,
as_of timestamp without time zone NOT NULL, -- in UTC
summary text,
precipintensity numeric(8,4),
precipprob numeric(2,2),
temperature numeric(5,2),
apptemp numeric(5,2),
dewpoint numeric(5,2),
humidity numeric(2,2),
windspeed numeric(5,2),
windbearing numeric(4,1),
visibility numeric(5,2),
cloudcover numeric(4,2),
pressure numeric(6,2),
ozone numeric(5,2),
preciptype text,
lat numeric(8,6) NOT NULL,
lon numeric(9,6) NOT NULL,
CONSTRAINT forecast_pkey PRIMARY KEY (foretime, as_of, lat, lon)
);
INSERT INTO weather.forecast
(windspeed, foretime, as_of, lat, lon)
VALUES
(11.19, '2/1/2016 8:00', '1/30/2016 23:00', 34.556, 28.345),
(10.98, '2/1/2016 8:00', '1/31/2016 5:00', 34.556, 28.345),
(10.64, '2/1/2016 8:00', '1/31/2016 11:00', 34.556, 28.345),
(10.95, '2/1/2016 8:00', '1/31/2016 17:00', 34.556, 28.345),
(10.39, '2/1/2016 8:00', '1/31/2016 23:00', 34.556, 28.345),
(9.22, '2/1/2016 8:00', '2/1/2016 5:00', 34.556, 28.345),
(10, '2/1/2016 9:00', '1/30/2016 11:00', 34.556, 28.345),
(9.88, '2/1/2016 9:00', '1/30/2016 17:00', 34.556, 28.345),
(10.79, '2/1/2016 9:00', '1/30/2016 23:00', 34.556, 28.345),
(10.8, '2/1/2016 9:00', '1/31/2016 5:00', 34.556, 28.345),
(10.35, '2/1/2016 9:00', '1/31/2016 11:00', 34.556, 28.345),
(10.07, '2/1/2016 9:00', '1/31/2016 17:00', 34.556, 28.345),
(9.57, '2/1/2016 9:00', '1/31/2016 23:00', 34.556, 28.345),
(7.93, '2/1/2016 9:00', '2/1/2016 5:00', 34.556, 28.345)
;
CREATE TABLE weather.meso
(
timestmp timestamp without time zone NOT NULL,
station text NOT NULL,
lat numeric NOT NULL,
lon numeric NOT NULL,
tmp numeric,
hum numeric,
windspd numeric,
winddir integer,
dew numeric,
CONSTRAINT meso_pkey PRIMARY KEY (timestmp, station, lat, lon)
);
INSERT INTO weather.meso
(station, timestmp, lat, lon, windspd)
VALUES
('KSBN', '2/1/2016 8:02', 34.556, 28.345, 16.1),
('KSBN', '2/1/2016 8:12', 34.556, 28.345, 12.6),
('KSBN', '2/1/2016 8:54', 34.556, 28.345, 11.5),
('KSBN', '2/1/2016 9:02', 34.556, 28.345, 18.1),
('KSBN', '2/1/2016 9:17', 34.556, 28.345, 12.2),
('KSBN', '2/1/2016 9:48', 34.556, 28.345, 11.5)
;
这是我想要的输出格式:
station date he actual forecast as_of
KSBN 2/1/2016 4 10.4 15.1 1/31/2016 6:00
KSBN 2/1/2016 5 12.7 11.32 1/31/2016 6:00
最佳答案
DDL 和示例数据确实有助于理解,但我所能提出的只是关于如何利用 row_number 的更多详细信息,例如,也可在此处在线获得 http://rextester.com/FIEUPI83002
select
row_number() OVER(PARTITION BY date_trunc('day', (foretime - interval '5 hours')) :: DATE
ORDER BY case when extract(HOUR FROM (foretime - interval '5 hours')) < 10 then 1 else 2 end, AS_OF desc) AS rn
, extract(HOUR FROM (foretime - interval '5 hours')) HR
, foretime
, as_of
from forecast
order by RN, as_of DESC
根据可用的示例数据,其结果如下:
+----+----+-----------+---------------------+---------------------+
| | rn | date_part | foretime | as_of |
+----+----+-----------+---------------------+---------------------+
| 1 | 1 | 4 | 01.02.2016 09:00:00 | 01.02.2016 05:00:00 |
| 2 | 2 | 3 | 01.02.2016 08:00:00 | 01.02.2016 05:00:00 |
| 3 | 3 | 4 | 01.02.2016 09:00:00 | 31.01.2016 23:00:00 |
| 4 | 4 | 3 | 01.02.2016 08:00:00 | 31.01.2016 23:00:00 |
| 5 | 5 | 4 | 01.02.2016 09:00:00 | 31.01.2016 17:00:00 |
| 6 | 6 | 3 | 01.02.2016 08:00:00 | 31.01.2016 17:00:00 |
| 7 | 7 | 4 | 01.02.2016 09:00:00 | 31.01.2016 11:00:00 |
| 8 | 8 | 3 | 01.02.2016 08:00:00 | 31.01.2016 11:00:00 |
| 9 | 9 | 3 | 01.02.2016 08:00:00 | 31.01.2016 05:00:00 |
| 10 | 10 | 4 | 01.02.2016 09:00:00 | 31.01.2016 05:00:00 |
| 11 | 11 | 3 | 01.02.2016 08:00:00 | 30.01.2016 23:00:00 |
| 12 | 12 | 4 | 01.02.2016 09:00:00 | 30.01.2016 23:00:00 |
| 13 | 13 | 4 | 01.02.2016 09:00:00 | 30.01.2016 17:00:00 |
| 14 | 14 | 4 | 01.02.2016 09:00:00 | 30.01.2016 11:00:00 |
+----+----+-----------+---------------------+---------------------+
因此,如果您要使用过滤器 WHERE RN = 1,则应列出每天的“最近”行,即 10 之前的行。我相信这样的事情会适合您的要求。请注意,使用 case 表达式和对 row_number 序列进行排序的其他列(在 OVER() 子句内)调整列组合以满足您的需要。
下方为原创评论
在没有示例数据的情况下,我将只讨论一种方法;我建议使用 ROW_NUMBER() OVER(按 date_time_column DESC 排序) 例如
select
*
from (
select *
, ROW_NUMBER() OVER(ORDER BY timestmp DESC) AS RN
from forecast_table
-- where timestmp < 10 am (include required logic ere)
)
WHERE RN = 1
由于 DESCendng 顺序,计算列 RN 中值为 1 的行将是最新的行。这也可以与 PARTITION BY 结合使用,因此 row_numebr 方法对于查找“最新”行或“最旧”行甚至每个分区或整体的最大/最小行很有用。
关于PostgreSQL 查询 : getting latest forecast before a deadline, 与实际比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40687950/
在 Forecast 包中找不到 forecast.Arima 函数。错误显示未找到“forecast.Arima”。可以使用预测功能代替“forecast.Arima”功能吗?我正在使用预测 8.1
我正在使用 Dark Sky Forecast API 来检索一些天气信息。 当我阅读 official doc ,我发现“选项”部分描述了查询参数的用法。 例如, The API request m
我是 R 的新手,因为我正在关注另一个脚本的脚本,所以我遇到了麻烦,因为我无法安装(和调用)“预测”库。 我已经阅读了其他帖子,但到目前为止似乎没有成功的解决方案。 一些信息: 我从“Cran -R-
再会。 我在我的 SQL 查询中被这个问题阻止: 鉴于下表: 创建表`Forecasted_Sales_tcl`( `DEALER_id` varchar(15) 非空, `SALES_period`
SAS Forecast Studio 是一种用于商业智能预测的编程工具。它(大概)在后端生成 SAS 代码,然后生成输出。 有什么方法可以访问生成的用于生成输出的 SAS 代码,并将其保存为 .SA
我正在尝试使用 forecast.holtwinters 函数,当我尝试运行它时: dftimeseriesforecast %" "accuracy" "Acf" "arfima" "Arima"
我想预测一个线性模型,我用 ols 估计的。但是,它总是预测 future 相同的时间段,与我的数据集的长度相同。 这是我所做的。 data forecast(model,h=6,ts=T) Err
在 centOS 上使用 R version 3.2.3 (2015-12-10) 我正在尝试 install.packages('forecast') 我明白了: install.packages(
我正在构建时间序列模型。 但是,我无法理解 simulate 之间的区别。函数和 forecast forecast 中的函数包裹。 假设我建立了一个 arima 模型并想用它来模拟长达 10 年的
我是 R 编程的新手,但我一直在阅读您的博客和帖子,以便了解最新的预测包。然而,我一直在努力应对季节性的影响。 以最简单的信号为例: train <- ts(sin((2*pi)*seq(from=0
我正在尝试以周为基础预测年度时间序列(一年 52 周,我有 164 周的数据)。由于频率大于 24,R 建议我使用“STLf”而不是“ets”,以避免忽略季节性。 “STLf”函数运行得很好,我得到了
根据示例代码,我尝试使用 c++ 和 RInside 运行预测方法,但我得到了 Read 100 items 捕获异常:不是矩阵 谁能看看我的代码。 #include int main
我在 Google 和此处进行了广泛搜索,但似乎找不到我正在寻找的答案,或者至少找不到我理解的一些东西。是否可以在 Pandas 中使用 EWMA 进行预测?例如,如果我有从 2 月 1 日到 3 月
我正在尝试使用 SARIMAX 模型进行 TS 预测。但是,我遇到了某种错误,我不知道如何处理。我的代码很简单: import statsmodels.api as sm fit = sm.tsa.s
我将 ruGarch() 与 garch(1,1) 和 arma(2,0) 均值模型与外部回归量一起使用: spec=ugarchspec( variance.model=list(garchOrde
我在本地计算机上的 R Studio 中创建了大约 75K 时间序列。 在将流程迁移到具有更强处理能力的 VM 之前,我正在寻找加快处理时间的方法。 Fable 是在后台处理所有并行处理还是有更多机会
我想绘制一个 forecast使用 dygraphs 打包时间序列模型的预测. documentation建议使用以下方法进行实际预测: hw % dySeries("ldeaths", labe
我是 Pytorch_Forecasting 的新手。我遵循了与“使用时间融合变压器进行需求预测”(https://pytorch-forecasting.readthedocs.io/en/late
我是 R 包的新手,我正在处理时间序列。我必须建立一个预测模型来预测 future 的点击次数。预测的时间间隔需要每小时。 我的示例时间序列: DateTime Clicks
我有大量时间序列需要生成预测。为了自动生成最佳预测,我想应用一些模型,如 auto.arima、ets、(s)naive、神经网络等。不幸的是,当它循环遍历时间序列时,一些模型会失败,从而停止R脚本的
我是一名优秀的程序员,十分优秀!