跨越2天的时间的SQL顺序

时间:2012-05-23 12:56:26

标签: mysql sql datetime

标题可能非常神秘,但这是我的问题。

我有一天的事件表(行程)。每个条目(例如访问博物馆)都有slot_start和slot_end时间列。这是24小时格式,例如13:00:00 - 15:00:00。

我想通过slot_start asc订购这些,但我可以通过slot_start 00:00:00来获得“去酒吧/俱乐部”的条目。午夜,这将是第一次订购,这将是正确的订单,但由于这实际上是新的一天,我希望它来到博物馆后。

这些没有具体日期。他们只受到他们的老虎机时间的限制,并被认为是一天的事件。

有没有人有这种设置的经验?或者,任何人都可以建议一种不同的方式来设置每个'事件'的时间?我想我可能不得不在第1天,第2天介绍某天的某些元素......

4 个答案:

答案 0 :(得分:0)

您可以使用以下方式按多列排序:

ORDER BY Day, Time

答案 1 :(得分:0)

所以“00:00:00”是指在博物馆之后,如果他们在00:01:00进入俱乐部?还是00:01:00?

你需要在桌子上用“天”来控制它。

对你的问题一个非常“丑陋”的解决方案是这样的:

首先选择一个“限制”来考虑总是“较旧”的记录,让我们说3AM所以3之前的每个记录都将被视为“之后”其他所有记录。然后做:

select * 
from your_table 
where slot_start > '03:00:00'
order by slot_start 

union

select * 
from your_table 
where slot_start < '03:00:00'  and slot_start > '00:00:00'
order by slot_start 

但同样,这不是一个好的解决方案。理想情况下,您需要在桌面上进行“日间”控制

答案 2 :(得分:0)

我个人使用start_unix和持续时间。

  • start_unix是事件开始时的unix_timestamp
  • 持续时间只是持续时间
  • end_unix =(start_unix + duration)

这是实现对这些问题的完全控制的简单方法。

对你来说,一个有罪的解决方案可能是将这些经过午夜的时间设置为例如25:00:00(01:00:00),当你展示它们时,你会做SELECT MOD(slot_start, 24) AS slot_start_mod和{{ 1}}。

答案 3 :(得分:0)

这是一个想法,您可以从实际的Slot_start时间中减去1分钟,仅用于排序(但建议在表格中使用日期列)。

Select * from Table order by dateadd(minute,-1,TIME)

dateadd函数将(-1)分钟添加到TIME列只是为了对它们进行排序