2

私のSQLクエリは2つの列を返します。最初の列は「作成日」、2番目の列は「更新日」です。最初の列には2番目の列に対して以前のタイムスタンプがあります。

営業日 (午前 9 時から午後 5 時) の応答を表示できる 3 番目の列を追加する必要があります。つまり、作成日が 2012 年 1 月 4 日 09:00:20 で、「更新日」が同じ日の午後 4 時である場合3 番目の列には 7 時間が表示されます

作成日が 2012-01-04 16:00:20 (午後 4:00) で、「更新日」が 2012:01:05 (1 月 2 日) の 10:00m の場合、3 番目の列には 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 に答える