2009-09-04 49 views
3

的間隔這裏去一個尚未日期時另一個SQL問題...分裂在週中的Postgres

我使用PHP和將顯示事件跨越幾天,幾周或幾個月可能Postgres的建設日曆應用。每個事件都有一個開始日期和結束日期,並按範圍選擇它們不是問題;然而,如果Postgres可以在每週的第一天分割多周活動,那對我來說會很有用。我被告知可以使用GROUP BYEXTRACT來完成,但是我用SQL來理解方式不夠好。

問題是:可以這樣做,準確的查詢是什麼樣子?目前我正在使用SELECT * FROM events WHERE (range) OVERLAPS (range);然後在PHP中進行分割,但顯然不是最優的。

回答

3

您可以使用Postgres功能generate_series。在8.3和更早的版本,做這樣的事情

select current_date + s.a as dates from generate_series(0,14,7) as s(a); 

在8.4,你也可以做

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, 
           '2008-03-04 12:00', '10 hours'); 
+0

謝謝,我不知道'generate_series'。我目前使用的是8.3,所以我想我必須切換到8.4才能真正使用該功能,因爲在日期中應用8.3示例似乎有點困難。 – slikts

+1

如果將generate_series的間隔時間設置爲「1天」,這並不難;有一個很好的例子,每月做這種事情在http://www.mail-archive.com/[email protected]/msg134699.htmlbv –

1

首先 - 這將是很好的顯示查詢的一些樣品的輸入和輸出,你會像我們一樣幫助你 - 例如,我真的不明白你需要什麼。

另外 - 你可能會發現OVERLAPS是不理想的,因爲它是不可轉位的。相反,您可能想要使用我在this blog post中描述的方法。

+0

對不起,不清楚。這是我查詢當前返回結果的示例:。最後兩個事件跨越了幾個月,我想將它們分成與該範圍內一週中的第一天一樣多的事件。例如:。 – slikts

+0

對不起,網址已損壞。這些是正確的: * http://pastebin.com/d5021e30d * http://pastebin.com/d758bf244 – slikts