2

我的 sql 查询返回两列,第一列是“创建日期”,第二列是“更新日期”,第一列相对于第二列具有先前的时间戳。

我需要添加第三列,它可以显示工作日时间(上午 9:00 到下午 5:00)响应,即如果创建日期是 2012-01-04 09:00:20 并且“更新日期”是同一天下午 4:00第三列应显示 7 小时

如果创建的日期是 2012-01-04 16:00:20(下午 4:00)并且“更新日期”是 2012:01:05(1 月 2 日)的 10:00,那么第三列应该显示 2 小时。

它应该排除周六和周日。

您能否为此建议适当的 SQL 查询。

4

1 回答 1

1

正如@Gordon Linoff 评论的那样,您需要创建一个包含您的营业时间的表格:

CREATE TABLE business_days (
  start DATETIME NOT NULL,
  end   DATETIME NOT NULL
);

INSERT INTO `business_days`
  (start, end)
VALUES
  ('2011-12-30 09:00', '2011-12-30 15:00'),  -- short day
  ('2012-01-03 09:00', '2012-01-03 17:00'),  -- 31st, 1st were Sat/Sun
  ('2012-01-04 09:00', '2012-01-04 17:00'),  -- 2nd was a public holiday
  ('2012-01-05 09:00', '2012-01-05 17:00'),
  -- etc.

然后你可以这样做:

SELECT   m.*,
         SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(
           LEAST(m.updated, b.end),
           GREATEST(m.created, b.start)
         ))))
FROM     my_table m JOIN business_days b
           ON b.start < m.updated AND m.created < b.end
GROUP BY m.created, m.updated  -- or some other key into my_table

sqlfiddle上查看。

于 2012-11-12T22:57:50.100 回答