1

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

我有一张一天的活动表(行程)。每个条目(例如参观博物馆)都有 slot_start 和 slot_end 时间列。这是 24 小时制,例如 13:00:00 - 15:00:00。

我想通过 slot_start asc 订购这些,但我可以使用 slot_start 00:00:00 输入“去酒吧/俱乐部”,即。午夜将首先订购,这将是正确的顺序,但由于这实际上是新的一天,我希望它在博物馆之后。

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

有没有人有这种设置的经验?或者任何人都可以建议一种不同的方式来设置每个“事件”的时间?我想我可能必须根据第 1 天、第 2 天来介绍它是哪一天的一些元素......

4

4 回答 4

0

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

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

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

对您来说,一个有罪的解决方案可能是将这些经过午夜的时间设置为例如 25:00:00 (01:00:00),并且当您向他们展示时,您会执行 a SELECT MOD(slot_start, 24) AS slot_start_modand ORDER BY slot_start

于 2012-05-23T13:13:51.557 回答
0

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

你需要在你的桌子上放一个“一天”来控制它。

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

首先选择一个“限制”来考虑记录总是“较旧”,比如说凌晨 3 点,因此 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 

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

于 2012-05-23T13:13:00.090 回答
0

您可以使用以下命令按多列排序:

ORDER BY Day, Time
于 2012-05-23T13:03:53.893 回答
0

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

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

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

于 2012-05-23T13:29:06.603 回答