Я хочу сделать отчет с использованием DB2 SQL, в котором будет показан список продолжительности (часы) с 15 по 17 мая. Текущий список выглядит так:
нажмите здесь, чтобы посмотреть список
Как видите, из WO-391296
(вторая строка) время перекрытия равно ACTSTART
и ACTFINISH
.
Я уже пробовал использовать функцию перекрытия. Это мой запрос:
SELECT
*
FROM
workorder a,
workorder b
WHERE
a.wonum <> b.WONUM
AND (a.ACTSTART, a.ACTFINISH) OVERLAPS (b.ACTSTART, b.ACTFINISH)
AND DATE(a.ACTSTART) = '2019-05-15'
AND DATE(a.ACTFINISH) = '2019-05-17'
AND a.assetnum = 'A0000004'
AND DATE(b.ACTSTART) = '2019-05-15'
AND DATE(b.ACTFINISH) = '2019-05-17'
AND b.assetnum = 'A0000004' ;
Но это не работает и просто выдает мне сообщение об ошибке .:
Ошибка SQL [42601]: неожиданный токен «OVERLAPS» был обнаружен после «TSTART, a.ACTFINISH)». Ожидаемые токены могут включать: «IN». SQLCODE = -104, SQLSTATE = 42601, DRIVER = 3,64.114
Вот мой фактический полный запрос:
SELECT assetnum, wonum, worktype, actstart, actfinish,
(DAY(ACTFINISH-ACTSTART)*24 + HOUR(ACTFINISH-ACTSTART)) + FLOAT(MINUTE(ACTFINISH-ACTSTART))/60 AS wotime
FROM (
SELECT assetnum, wonum, WORKTYPE, ACTSTART,
(CASE WHEN ACTFINISH IS NULL THEN '2019-05-17-24.00.00' ELSE ACTFINISH END) AS ACTFINISH
FROM workorder ast
WHERE istask=0 AND siteid = 'SBY' AND WORKTYPE = 'CM' AND
(ast.assetnum = 'A0000004' or
assetnum in (select distinct assetnum from asset ast where ast.parent = 'A0000004') or
assetnum in (select distinct assetnum from asset ast where ast.parent
in (select distinct assetnum from asset ast where ast.parent = 'A0000004'))) AND
(
(status IN ('COMP', 'CONFIRM', 'CLOSE') AND
(date(ACTFINISH) BETWEEN '2019-05-15' and '2019-05-17')) OR
(status IN ('INPRG', 'COMP', 'CONFIRM', 'CLOSE') AND
(date(ACTSTART) <= '2019-05-17' AND (date(ACTFINISH) > '2019-05-17' OR ACTFINISH IS null)))
)
);
Фактическая общая продолжительность этого списка составляет 6 часов, что неправильно , потому что я не хочу SUM
перекрывающееся время.
Итак, окончательный результат должен составить 3,5 часа (без WO-391296
).