2

我有几个输入数据和过期mysql“日期时间”值。我需要返回给定时间段的总计数。

前任:

In time                Out Time
2012-02-02 10:00       2012-02-02 12:00
2012-02-02 09:00       2012-02-02 14:00
2012-02-02 10:00       2012-02-02 11:00

我需要从2012-02-02 10:002012-02-02 11:00总计为3

4

2 回答 2

2

我假设您希望该期间的任何部分落在您的搜索日期期间内或“重叠”的项目In timeOut time

首先,让我们彻底检查日期中的“重叠”意味着什么。重叠是以下任何一种情况:

                 开始 1 结束 1
-------------------------------------------------- -------------------------------------------
 开始 2 结束 2
 开始 2 结束 2
                             开始 2 结束 2

并且不是以下任何一种情况:

                 开始 1 结束 1
-------------------------------------------------- -------------------------------------------
 开始 2 结束 2
                                                      开始 2 结束 2

如果你仔细看,你会注意到Start2 < End1 AND End2 > Start1定义了这个关系,所以这将成为你的WHERE子句。


因此,您应该尝试以下方法:

SELECT COUNT(*)
FROM myTable
WHERE '2012-02-02 10:00:00' <= `Out Time`
AND '2012-02-02 11:00:00' >= `In Time`
于 2012-10-11T06:13:21.180 回答
1

写这个查询

select count(*) from table name where `In time` <= '2012-02-02 10:00' and `Out Time` >= '2012-02-02 11:00'

它会给你数 3

于 2012-10-11T06:13:25.497 回答