1

我正在处理(对我而言)巨大的 SQL 问题。我有一个名为“timeshifts”的表,它有 4 列:id、name、from 和 to。最后两种类型是TIME。

现在:我有三个时班:06:00 - 14:00 14:00 - 22:00 22:00 - 06:00

现在,我必须找到当前时间的正确班次(这就像一个魅力),但我找不到属于当前班次的正确记录。IE。名为 user_times 的表包含具有单独日期和时间值的字段。根据当前的时移,我必须找到属于时移的记录。前两班没问题,但第三班过了午夜,那是我的问题。

这是找到正确班次的查询,直到午夜的事件:

SELECT 
  FLOOR(SUM(time_sum) / 60) AS th,
  MOD(SUM(time_sum), 60) AS tm,
  t.* 
FROM
  ur_user_times ut,
  ur_timeshifts t 
WHERE CURTIME() >= IF (
    t.timeshift_to < t.timeshift_from,
    0,
    ADDTIME(t.timeshift_from, "00:15")
  ) 
  AND CURTIME() <= ADDTIME(
    IF (
      t.timeshift_to < t.timeshift_from,
      ADDTIME(t.timeshift_from, "10:00:00"),
      t.timeshift_to
    ),
    "00:15"
  ) 
  AND ut.`date` BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()
  AND ut.`start` BETWEEN ADDTIME(t.`timeshift_from`, "-10:00:00") AND ADDTIME(t.`timeshift_to`, "-10:00:00")
  AND ut.user_id = 40 

ut.start 是我们感兴趣的时间价值。

4

2 回答 2

2

试试这个:

select *
from timeshifts ts,
usertimes ut
where 
(ts.from < ts.to and ut.start >= ts.from and ut.start <= ts.to) OR
(ts.from > ts.to and (ut.start >= ts.from or ut.start <= ts.to))
于 2012-10-05T09:38:36.340 回答
1

几天前发布了类似的查询:

请看这个问题:

Shift wise datetime check in sql server query

于 2012-10-05T09:38:53.523 回答