2009-09-04 47 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