Home > Enterprise >  Get items that are closed within 1 business day
Get items that are closed within 1 business day

Time:06-29

I have a MYSQL database table of tickets that I need to count where the ticket has been closed within 1 business day of it being opened.

I've been able to get some of the way with my query below, but I'm at a loss in how to allow that to work by business days. So tickets opened on a Friday can be completed on a Monday and still count as being closed within one business day.

SELECT count(*)
FROM helpdesk 
WHERE hd_closeDateTime < hd_openDateTime   interval 1 day  
AND hd_status = 2

I think I need some sort of DAYOFWEEK(timestamp_column) BETWEEN 2 AND 6? But I'm not sure how this fits with my current WHERE part.

The pertinent parts of the table are below:

CREATE TABLE `helpdesk` (
 `hd_id` int(11) NOT NULL,
 `hd_title` varchar(255) NOT NULL,
 `hd_openDateTime` datetime NOT NULL,
 `hd_closeDateTime` datetime DEFAULT NULL,
 `hd_status` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Thanks to @Akina this is what is now working. The ELT looks up the number of days to add to the ticket using the Interval function so it adds 3 days on Friday, 3 days on Saturday, and 2 days on Sunday allowing the tickets to be counted if they are completed within a business day.

SELECT *, DAYOFWEEK(hd_openDateTime)
FROM helpdesk 
WHERE hd_closeDateTime < hd_openDateTime   INTERVAL 
ELT(DAYOFWEEK(hd_openDateTime),2,1,1,1,1,3,3) DAY  
AND hd_status = 2

For anyone interested in more info

ELT - https://www.w3resource.com/mysql/string-functions/mysql-elt-function.php

DAYOFWEEK - https://www.w3schools.com/sql/func_mysql_dayofweek.asp

CodePudding user response:

Test, for example, this:

SELECT COUNT(*)
FROM helpdesk 
WHERE hd_closeDateTime < DATE(hd_openDateTime)   INTERVAL ELT(DAYOFWEEK(hd_openDateTime),3,2,2,2,2,2,4) DAY  
  AND hd_status = 2

Only date (not time) is taken into account. If the time must be taken into account too then

SELECT COUNT(*)
FROM helpdesk 
WHERE hd_closeDateTime < hd_openDateTime   INTERVAL ELT(DAYOFWEEK(hd_openDateTime),2,1,1,1,1,1,3) DAY  
  AND hd_status = 2
  • Related