我有遍佈全球的數據點。每個數據點都有一個時間戳。PostgreSQL按季節分組(北半球和南半球)
我想按照季節分組數據,如圖所示(來源:https://en.wikipedia.org/wiki/Season#/media/File:Seasons1.svg)。
這是我試過到目前爲止(在北半球冬季2011/2012):
SELECT * FROM my_table
WHERE my_date BETWEEN '2011-12-21' AND '2012-03-21'
AND ST_Y(ST_Centroid(geom)) > 0;
我怎樣才能做到這一點對所有可能的年?我嘗試過...或者在...之間約會......但是這很慢。
怎樣才能在北半球和南半球選擇冬季?
更新
有關北半球冬季的所有數據我使用此查詢:
CREATE TABLE season_winter_north AS WITH first_step AS (
SELECT
id,
extract(month from my_date)::int AS month,
extract(day from my_date)::int AS day,
ST_Centroid(geom) AS geom
FROM mytable
WHERE ST_Y(ST_Centroid(geom)) > 0)
(SELECT * FROM first_step
WHERE month = 12
AND day >= 21)
UNION ALL
(SELECT * FROM first_step
WHERE month = ANY('{1,2}'))
UNION ALL
(SELECT * FROM first_step
WHERE month = 3
AND day<21)
是否有一個更優雅的或有效的解決方案?
我使用PostgreSQL 9.3.9。沒有稱爲make_date的函數。 – Stefan