풍향 예측 데이터가있는 여러 기상 위치가 있습니다. 전날 10:00
전에 가장 최근의 as_of
이 필요합니다. 각 시간마다, 각 위치마다이 작업이 필요합니다.다중 열 그룹 식별자가있는 최신 예측 데이터 얻기
위치는 고유 한 lat
및 lon
쌍으로 정의됩니다. 관련 샘플 데이터와
전체 테이블 스키마 :
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 8:00', 29.114, 16.277),
(10.39, '2/1/2016 8:00', '1/31/2016 23:00', 29.114, 16.277),
(9.22, '2/1/2016 8:00', '1/31/2016 5:00', 29.114, 16.277),
(10, '2/1/2016 9:00', '1/30/2016 04:00', 34.556, 28.345),
(9.88, '2/1/2016 9:00', '1/31/2016 09: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', 29.114, 16.277),
(10.35, '2/1/2016 9:00', '1/31/2016 11:00', 29.114, 16.277),
(10.07, '2/1/2016 9:00', '1/31/2016 17:00', 29.114, 16.277)
;
원하는 결과 형식 :
lat lon Foredate foreHE windspeed as_of
34.556 28.345 2/1/2016 8 10.98 1/31/2016 5:00
34.556 28.345 2/1/2016 9 9.88 1/31/2016 9:00
29.114 16.277 2/1/2016 8 10.95 1/31/2016 8:00
29.114 16.277 2/1/2016 9 10.80 1/31/2016 5:00
여기에 올바른 as_of
를 얻을 내 코드입니다. 풍속으로 돌아 가려고 할 때 상황이 나빠질 수 있습니다. 난 정말 어쩌면 제외하고는, PostgreSQL을의 오류 메시지 개선 할 수
[42803] ERROR: column "a.windspeed" must appear in the GROUP BY clause or be used in an aggregate function
Position: 184
조금 이론으로 활용하려면 다음 작업을 다시 풍속을 추가 할 때
SELECT
date_trunc('day', (a.foretime)) :: DATE AS Foredate,
extract(HOUR FROM (a.foretime)) AS foreHE,
a.lat,
a.lon,
max(a.as_of) - interval '5 hours' as latest_as_of
FROM weather.forecast a
WHERE date_trunc('day', foretime) :: DATE - as_of >= INTERVAL '14 hours'
GROUP BY Foredate, foreHE, a.lat, a.lon
표시되지 않습니다. latest_as_of 시간 중 일부는 지난 10am입니다. 이것이 나의 쿼리 코드에서 WHERE 절의 목적이다. – otterdog2000
@ otterdog2000 귀하의 요청에 따라 변경했습니다. –
감사합니다.이 코드를 전체 코드와 결합하면 멈출 수 없습니다. 쿼리는 죽일 때까지 그냥 실행됩니다. – otterdog2000