3
我有以下查詢:順序排在PostgreSQL的
SELECT
routeid,
'SRID=4326;LINESTRING(' || string_agg(lon || ' ' || lat, ',') || ')' AS the_geom
FROM route_table
WHERE observation_time BETWEEN '2012-09-12 10:00:00' AND '2012-09-12 10:15:00'
GROUP BY routeid HAVING COUNT(lon) > 1 ORDER BY observation_time ASC;
此查詢的目的是從route_table(其中包括一個路由ID的把所有經度/緯度值,observation_time,緯度,和lon列),將它們按routeid分組,並按照觀察時間在每個組內對它們進行排序。但是,上面的SQL無效,因爲observation_time出現在ORDER BY子句中,而不出現在GROUP BY中。當我將observation_time添加到GROUP BY時,我得不到正確的結果。
假設一個數據集是這樣的:
routeid | observation_time | lat | lon
---------------------------------------------
1 | '2012-09-12 01:00:00' | 30 | -75
1 | '2012-09-12 01:05:00' | 31 | -76
1 | '2012-09-12 01:10:00' | 31 | -76.5
2 | '2012-09-12 01:03:00' | 39 | -22
2 | '2012-09-12 01:00:00' | 40 | -22
2 | '2012-09-12 01:06:00' | 41 | -22
輸出應該是這樣的:
routeid | the_geom
--------------------------------------------------------
1 | 'SRID=4326;LINESTRING('-75 30,-76 31,-76.5 31)
2 | 'SRID=4326;LINESTRING('-22 40,-22 39,-22 41)
所以現在的問題是:怎樣的PostgreSQL中的組內實現行的這個順序?
'爲了通過observation_time,LON,lat'相反,也許? postgres似乎沒有string_agg函數的排序選項,就像myqsl爲group_concat所做的那樣。 –
Thanks @Marc - 事實證明,postgres實際上有一種方法來排序string_agg的東西,這正是我需要看的地方! – TheOx
猜測我正在看的PG9.0文檔沒有提及按順序排列的選項。很高興知道它在那裏。 –