Как вычислить разницу дат если они в одном столбце?
Имею таблицу
id_заявки | статус_заявки | время_изменения_статуса_заявки |
---|---|---|
a11f00 | взята в работу | 05:00:00 |
a11f00 | закрыта | 05:02:00 |
Я хочу вычислить время отработки заявки, т.е. найти разность (время закрытия - время взятия в работу), то есть 05:02:00 - 05:00:00. Какой скрипт могу написать? Или это можно сделать в Excele?
Ответы (2 шт):
Автор решения: vikttur_Stop_RU_war_in_UA
→ Ссылка
Или это можно сделать в Excele?
Можно, и довольно просто:
=ЕСЛИ(B2="закрыта";C2-ВПР(A2;$A$2:C2;3;);)
Заявка не может быть закрыта, если ранее не взята в работу (т.е. выше обязательно есть строка с номером заявки). Если до закрытия могут быть и другие (промежуточные) статусы, время будет считаться от верхней строки с номером заявки.
Автор решения: Superproger77
→ Ссылка
Заметил в самом конце (когда уже написал решение на PostgreSQL) что используете MySQL. Поэтому у меня решение и на PostgreSQL и на MySQL.
MySQL
-- Создание таблицы Время
CREATE TABLE Заявки
(
id_заявки VARCHAR(10),
статус_заявки VARCHAR(14),
время_изменения_статуса_заявки TIME
);
-- Добавление новых записей в таблицу Время
-- Для наглядности добавил еще несколько записей о других заявках
INSERT INTO
Заявки (id_заявки, статус_заявки, время_изменения_статуса_заявки)
VALUES ('a11f00', 'взята в работу', '05:00:00'),
('a11f00', 'закрыта', '05:02:00'),
('a11f11', 'взята в работу', '06:00:00'),
('a11f11', 'закрыта', '06:08:00'),
('a11f22', 'взята в работу', '06:55:10'),
('a11f22', 'закрыта', '07:08:00'),
('a11f33', 'взята в работу', '08:12:23'),
('a11f33', 'закрыта', '08:55:49'),
('a11f44', 'взята в работу', '09:01:02'),
('a11f44', 'закрыта', '23:33:44');
-- Посчитать время в работе
SELECT SUBTIME(t2.время_изменения_статуса_заявки, t1.время_изменения_статуса_заявки) AS Время_в_работе
FROM Заявки t1 JOIN Заявки t2 USING (id_заявки)
WHERE t1.статус_заявки = 'взята в работу'
AND t2.статус_заявки = 'закрыта';
/*
-- Посчитать время в работе конкретной заявки
SELECT SUBTIME(t2.время_изменения_статуса_заявки, t1.время_изменения_статуса_заявки) AS Время_в_работе
FROM Заявки t1 JOIN Заявки t2 USING (id_заявки)
WHERE t1.статус_заявки = 'взята в работу'
AND t2.статус_заявки = 'закрыта'
AND id_заявки = 'a11f00';
-- Выбрать таблицу целиком
SELECT *
FROM Заявки;
*/
PostgreSQL
-- Создание таблицы Время
CREATE TABLE Заявки
(
id_заявки VARCHAR(10),
статус_заявки VARCHAR(14),
время_изменения_статуса_заявки TIME
);
-- Добавление новых записей в таблицу Время
-- Для наглядности добавил еще несколько записей о других заявках
INSERT INTO
Заявки (id_заявки, статус_заявки, время_изменения_статуса_заявки)
VALUES ('a11f00', 'взята в работу', '05:00:00'),
('a11f00', 'закрыта', '05:02:00'),
('a11f11', 'взята в работу', '06:00:00'),
('a11f11', 'закрыта', '06:08:00'),
('a11f22', 'взята в работу', '06:55:10'),
('a11f22', 'закрыта', '07:08:00'),
('a11f33', 'взята в работу', '08:12:23'),
('a11f33', 'закрыта', '08:55:49'),
('a11f44', 'взята в работу', '09:01:02'),
('a11f44', 'закрыта', '23:33:44');
-- Посчитать время в работе
SELECT t2.время_изменения_статуса_заявки - t1.время_изменения_статуса_заявки AS Время_в_работе
FROM Заявки t1 JOIN Заявки t2 USING (id_заявки)
WHERE t1.статус_заявки = 'взята в работу' AND t2.статус_заявки = 'закрыта';
/*
-- Посчитать время в работе конкретной заявки
SELECT t2.время_изменения_статуса_заявки - t1.время_изменения_статуса_заявки AS Время_в_работе
FROM Заявки t1 JOIN Заявки t2 USING (id_заявки)
WHERE t1.статус_заявки = 'взята в работу'
AND t2.статус_заявки = 'закрыта'
AND id_заявки = 'a11f00';
-- Выбрать таблицу целиком
SELECT *
FROM Заявки;
*/