0

我们的应用程序中有每周重复发生的事件,并决定将每个事件的开始和结束时间存储为从一周开始(星期日上午 12 点)开始的秒数。这使得查询、排序等变得更加容易。

但是,有一个小问题:如果我们想获取在接近一周重置的时间发生的事件,该事件可以弥补这一差距,这使得查询变得困难。

一个正常的查询,在 99% 的时间都有效,用于获取给定时间在记录的开始时间和结束时间之间的记录。

time = 216000 # Tuesday, 12:00PM
SELECT * FROM events WHERE start_time <= 216000 AND end_time > 216000

困难的部分是当有一个事件从星期六晚上 11 点开始,到星期天凌晨 2 点结束时:

time = 3600 # Sunday, 1am
SELECT * FROM events WHERE start_time <= 3600 AND end_time > 3600

这不会返回任何内容start_time,因为它不会小于 3600,因为它在每周周期结束时开始。

我一直在绞尽脑汁想提出一个好的解决方案,但到目前为止还不够,所以我想把它开放给 SO 看看是否有我没有想到的解决方案的。我有一种感觉,我可以使用一些简单的数学方程式来完成这项工作,但数学不是我最好的科目:)

如果我需要更好地解释或给出更好的例子,请告诉我。

谢谢!

4

3 回答 3

1

您可以尝试以下方法:

select * from events 
   where (start_time <= 3600 or start_time>end_time) and end_time > 3600; 

这样,您将能够捕捉到在您休息时间之前开始并且仍在指定时间发生的事件。

于 2012-10-28T20:14:52.357 回答
0

您可以将开始时间设置得非常高。

SELECT * FROM events WHERE start_time <= 590000 AND end_time > 3600

于 2012-10-28T20:04:36.900 回答
0

您应该将您的时间存储为时间戳,然后计算每周的 start_time 并做一些数学运算。这可以防止您描述的问题,然后您:

select * from events where (start_time < SUNDAYS_TIMESTAMP and end_time > SUNDAYS_TIMESTAMP或者你真正想尝试的任何东西。

您应该以通用格式存储数据,并从中找出您想要的内容。

于 2012-10-28T20:29:38.210 回答