如何从具有时间帧属性的表中获取DB记录?

时间:2015-09-01 15:22:54

标签: sql ruby-on-rails ruby postgresql

我想请求以下问题的帮助:

我有一个带有PostgreSQL的Ruby on Rails应用程序。 我有桌子EVENTS。每个事件都有2个属性 starts_atends_at。表示事件持续时间的时间范围。

可能发生的事情我很少发生同时发生的事件。

我想构建查询,其中:

  • 我得到了在给定时间范围内发生的所有事件。例如。 "给我12月份的所有活动"。如果有事件从11月开始到1月结束,我也想得到它。

  • 我想从给定的时间戳中获取所有事件。与前一个类似,但作为输入,我只给出时间戳而不是时间帧。

我的问题是我应该如何解决上述问题?

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