【发布时间】:2014-10-31 00:45:13
【问题描述】:
所以我有一个包含start、end、taxi 和driver 的表。 City 现在希望按月获取历史查询,了解当月谁乘坐了哪辆出租车,以及发生任何变化的时间。
因此,这会抓取从 2014 年 7 月开始、在 2014 年 7 月结束或正在进行中的分配行(在 7 月之前开始并在该月之后结束或尚未结束)。
我的问题是是否有更有效或更优雅的查询来获取这些行?
SELECT * FROM `taxi_assignments` WHERE
(`start` BETWEEN '2014-07-01 00:00:00' AND '2014-07-31 23:59:59')
OR (`end` BETWEEN '2014-07-01 00:00:00' AND '2014-07-31 23:59:59')
OR (`start` < '2014-07-01 00:00:00' AND
(`end` > '2014-07-31 23:59:59' OR `end` = '0000-00-00 00:00:00')
)
【问题讨论】:
-
你为什么不只检查一个月。 IE。
(MONTH(start) = 7 OR MONTH(end)=7 OR (MONTH(start) < 7 AND (MONTH(end) > 7 or MONTH(end) = 0)) -
这将获得 2012 年 7 月、2013 年等的分配,他们想要 Y 年 X 月的记录。
-
@shell,不要使用这样的功能 - 它会阻止引擎使用任何索引。
-
@prix 但数据不太一样,请参阅sqlfiddle.com/#!2/3a60a/1
-
@jerrygarciuh 我明白了,那么您需要 Jim 的解决方案,它会考虑到这些日期,您需要从
0000-00-00 00:00:00切换到NULL以便IS NULL可以正确捕获最后一个.
标签: mysql sql date-range