我想请求以下问题的帮助:
我有一个带有PostgreSQL的Ruby on Rails应用程序。
我有桌子EVENTS
。每个事件都有2个属性
starts_at
和ends_at
。表示事件持续时间的时间范围。
可能发生的事情我很少发生同时发生的事件。
我想构建查询,其中:
我得到了在给定时间范围内发生的所有事件。例如。 "给我12月份的所有活动"。如果有事件从11月开始到1月结束,我也想得到它。
我想从给定的时间戳中获取所有事件。与前一个类似,但作为输入,我只给出时间戳而不是时间帧。
我的问题是我应该如何解决上述问题?
答案 0 :(得分:0)
首先从时间范围获取所有事件。 创建一个函数并重新接收参数
SELECT *
FROM events
WHERE ends_at >= @your_begin_timeframe
AND start_at <= @your_end_timeframe
如果您希望事件形成一个月,则需要months
表。
个月:
month_id month_name begin end
1 nov 2015 01/11/2015 30/11/2015
2 dec 2015 01/12/2015 31/12/2015
然后加入两个表
SELECT e.*, m.month_name
FROM events e
INNER JOIN months m
ON e.ends_at >= m.begin
AND e.starts_at <= m.end