【问题标题】:How to get a time range in MySQL Select query如何在 MySQL Select 查询中获取时间范围
【发布时间】:2011-05-04 22:59:51
【问题描述】:

我正在处理一个我无法解决的问题。 假设,我通过一个简单的 MySQL Select 查询得到结果:

SELECT date_from.rights, date_to.rights FROM rights

rights 保存描述用户需要访问的系统权限的记录。

权限受时间值的限制,显然是 FROM 和 TO。如果 date_fromdate_to 为 NULL,则权限不受限制(时间方面)。

表权限包含以下数据:

date_from 。 . . . . . . . . date_to

2011-05-20 . . . . . . . . . 2011-08-20
2011-06-20 . . . . . . . . .空
2011 年 3 月 20 日。 . . . . . . . . 2011-04-20
空值 .. 。 . . . . . . . . . . . 2011-01-20

我真正需要的 SELECT 查询是:

date_from 。 . . . . . . . . date_to

2011-05-20 . . . . . . . . .空
2011 年 3 月 20 日。 . . . . . . . . 2011-04-20
空值 .. 。 . . . . . . . . . . . 2011-01-20

希望你明白我的意思。我只需要对结果进行分组,以便在每个日期值相交的地方获得尽可能广泛的限时权限;)

我认为,GROUP BY 子句应该可以完成这项工作,但我就是找不到正确的公式。如果可能的话,我也想避免使用程序。

【问题讨论】:

  • 您的 2 个“表”或您需要 SQL 查询执行的操作的示例不足以描述您的问题。请回答以下问题: 1. 您的表架构是什么? (表上有哪些字段)和 2. 给出一些示例数据和 3. 结果集应该是什么样子?

标签: mysql sql group-by date-range


【解决方案1】:

我想这就是你要找的东西:

select *
from rights
where (date_from is null or date_from <= now())
and (date_to is null or date_to >= now())

祝你好运。

【讨论】:

  • 艾伦,谢谢你的回复,不幸的是这不是我需要的。这太容易了 :] 并根据当前日期给我一个结果。但我只需要对我已经从 SELECT 查询中获得的结果进行分组。我已经有一个 SELECT 查询,给出了某些结果(date_from 和 date_to),我只需要找到这些结果的交集并完成我上一篇文章中描述的工作。 ;)
猜你喜欢
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2021-08-17
  • 2015-06-06
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多