如何从具有时间框架属性的表中获取数据库记录?

Posted

技术标签:

【中文标题】如何从具有时间框架属性的表中获取数据库记录?【英文标题】:How can I get DB records from table with time frame attributes? 【发布时间】:2015-09-01 15:22:53 【问题描述】:

我想就以下问题寻求帮助:

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

它可能会发生,我会同时发生一些事件。

我想在哪里构建查询:

我得到在给定时间范围内发生的所有事件。例如。 “把 12 月的所有事件都给我。”如果有活动从 11 月开始到 1 月结束。我也想参加。

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

我的问题是我应该如何开始解决我上面描述的问题?

【问题讨论】:

你好 michal,下次尝试提供SqlFiddle 这样我们可以更好地理解问题并更快地给你答案 – 另请阅读How to askHow to create a Minimal, Complete, and Verifiable example. 【参考方案1】:

首先获取一个时间范围内的所有事件。 创建一个函数并接收参数

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

【讨论】:

以上是关于如何从具有时间框架属性的表中获取数据库记录?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询从具有1000万行的表中获取每个条目的最新记录

是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?

从 2 个表中获取记录数 - 一对多关系

如何使用sql从具有不同列的两个表中获取不同的记录

如何从 laravel 框架中的模型中的表中获取数据并直接在视图中使用?

如何优化限制查询以便从庞大的表中更快地访问数据?