我有以下问题:
事件有一个“开始”和“结束”时间以及一个数量。我两者都使用MySQL DATETIME。
现在,如果我有一个约束条件说“没有重叠的事件”,我需要进行一些检查等,但是如何设计呢?用户只需要5分钟左右的精度,但是我想用几秒钟来进行计算,因为那是“更简单”
/“更清洁”
如果我有一个事件(A),其起始端为“ YYYY-MM-DD 12:00:00”-“ YYYY-MM-DD 14:00:00”
还有一个
(B)“ YYYY-MM-DD 14:00:00”-“ YYYY-MM-DD 16:15:00”->即使它们都包含14:00:00,它们也不重叠。
为了确定它们确实不重叠,我应该使用
A.end <B.begin等
或者
A.end <= B.begin等,然后进行“修改”,使所有结束时间均为“ DATE HH:MM:00(减去一秒)”,而不是“ DATE
HH:MM:00”,即A.end则应为“ YYYY-MM-DD 13:59:59”,而不是“ YYYY-MM-DD 14:00:00”
第一种是最简单的方法,但是如果我有很多不同的事件并且需要检查我没有“超额预定”,即事件的单个金额没有超过总数(例如:如果每个事件,则它将丢失所有重叠)是预订人数最多的桌子,在任何给定时间我都不能超过桌子总数)
在处理日期时间范围时,通常使用开始时包含一个范围,而结束时使用一个不包含范围。例如:
(using ISO8601 formatting)
Start End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z
小于或等于开始且大于(但不等于)结束时,该值在范围内。在上面的示例中,02:00
属于第二个范围,而不是第一个范围。换一种说法:
Start <= value < End
或等效地,
Start <= value AND End > value
在数学中,使用间隔符号,这称为“半开”间隔。
[Start, End)
这总是比使用诸如这样的值的想法更好的方法01:59:59
。考虑一下我是否减去End - Start
以获得持续时间。我希望答案是一个小时,而不是59分59秒。
大多数示例都使用这些术语Start/End
,但有时您会看到Begin/End
或Start/Stop
。就个人而言,我认为当您具有包含范围/排除范围时,最好使用的一组术语是Start/Until
。它具有两个术语均为5个字符,按字母顺序排列并明确表示结束日期是排他性的优点。
另外,在谈论不同事件时,应将时间记录为UTC,以防止在时区周围造成混乱。这对于本地html" target="_blank">应用程序甚至很重要,因为许多时区都经过夏时制转换。您不希望您在数据库中记录的值是模棱两可的。在MySQL中,您可以使用TIMESTAMP
数据类型来确保值存储为UTC,或者,DATETIME
如果可以确保在应用程序代码中使用UTC值,则可以使用数据类型。
问题内容: 我正在尝试找出如何根据我存储在表中的数据来计算各种应用程序的实际停机时间。 目前,我只是在计算DowntimeMinutes中显示的DowntimeStart和DowntimeEnd之间的差异。 问题是,如果由于单独的组件故障而导致时间跨度,则应计入总数,而忽略重叠。 我的期望显示在“期望”列中。 关于如何将查询组合在一起以实现此目标的任何想法? 我看了看并研究了这些选项,但它们没有达
问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算
问题内容: 我仅使用DATETIME跟踪表中每周发生的定期事件。我只关心时间和星期几。 我需要能够将设置的DATETIME转换为当前或即将到来的未来时间。 IE如何将使用当前日期存储的日期转换为下一个出现的日期?即下个星期五的12:00:00左右,这样我就可以按日期订购活动了? 或者,我可以将时间和星期几分别存储为数字0-6。 更新: 从欧文(Erwin),我得到了类似的东西: 除了我得到的第一个
可设定日期与时间。 自动设定 连接至PlayStation®Network时,自动取得日期与时间的信息。 手动设定 可手动设定年/月/日/时/分/秒(12小时制时亦可设定AM/PM)。 轻触[OK]后,即会自00秒开始计数。 手动设定(通过互联网) 轻触[手动设定(通过互联网)],可连接互联网取得日期与时间的信息。
问题内容: 我已经看到了许多解决方案来识别日期范围重叠的记录,还有其他一些合并重叠范围的示例。 但是,我对显示仅重叠发生范围的结果感兴趣。实际上,我有3个ProductID(并且只有3个将存在),并且我试图为每个客户查找所有3个日期的日期范围。 问题答案: 答案如下: 这是使用自连接来计算每个产品上不同产品的数量。您需要三种截然不同的产品,因此该子句正在执行此操作。 有三种截然不同的产品,直到其中
问题内容: 假设您有一个包含标识符,开始时间和结束时间的表。这些开始和结束时间可以是任何时间长度。开始时间总是早于结束时间。假设没有空值。 哪种查询会告诉我最“受欢迎”的时间,即每行中的两个范围与其他大多数行重叠的地方? 现实生活中的应用是,它是一个记录用户登录和注销时间的表格。我想编写一个查询,该查询将告诉我何时有最多并发用户登录,并查看这段时间。 谢谢你。 问题答案: 这是使用简单自连接和a的