我有下表:
create_table "activities", force: :cascade do |t|
...
t.date "start_date", null: false
t.time "start_time", null: false
t.date "end_date", null: false
t.time "end_time", null: false
...
end
此表可以包含以start_date
等于 的活动end_date
和以不同于 的日期结束的其他活动start_date
。
我要做的是构建一个 SQL 查询,该查询将返回两个日期之间有一些活动的所有日期。
例如:
Activity 1: start_date: 2015-04-15, end_date: 2015-04-15
Activity 2: start_date: 2015-04-16, end_date: 2015-04-18
查询将收到两个参数:start_date
和end_date
,例如:
start_date: 2015-04-01
end_date: 2015-04-30
并且执行将返回在这两个日期之间有活动的所有日期。在上面的示例中,结果将是:
- 2015-04-15
- 2015-04-16
- 2015-04-17
- 2015-04-18
该应用程序是使用 Ruby on Rails 编写的,数据库位于 Postgres 中。这可以使用 Ruby 代码解决,但出于性能原因,我不想这样做。
如何在 Postgres 中仅使用一条 SQL 语句来实现此查询?我认为generate_series
Postgres 功能可以帮助解决这个问题,但是如何解决呢?