1

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

SELECT date_from.rights, date_to.rights FROM rights

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

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

表权限包含以下数据:

date_from 。. . . . . . . . date_to

2011 年 5 月 20 日。. . . . . . . . 2011 年 8 月 20 日
2011 年 6 月 20 日。. . . . . . . . 空
2011-03-20 。. . . . . . . . 2011-04-20
空... . . . . . . . . . . . 2011-01-20

我真正需要使用 SELECT 查询得到的是:

date_from 。. . . . . . . . date_to

2011 年 5 月 20 日。. . . . . . . . 空
2011-03-20 。. . . . . . . . 2011-04-20
空... . . . . . . . . . . . 2011-01-20

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

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

4

1 回答 1

0

我想这就是你要找的:

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

祝你好运。

于 2011-05-05T00:40:24.780 回答