Могу ли я указать, что ваш метод определения продолжительности ходьбы немного странный и на самом деле нарушается, если есть какие-либо случаи, когда гулять с собаками гуляют собаки до полуночи (это не учитывает дни)?Если endtime
и starttime
- Oracle DATE
s, то вы можете просто использовать
(endtime - starttime) * 24
Арифметика даты Oracle выражается в днях;умножьте на 24, чтобы получить количество часов.
Я бы посоветовал пересчитать часы после агрегирования:
SELECT walkername, dogname, SUM(walktime) * 24 FROM (
SELECT w.lastname || ', ' || w.firstname AS walkername
, d.name AS dogname, endtime - starttime AS walktime
FROM walkers w INNER JOIN jobs j
ON w.phonenumber = j.walkerphonenum
INNER JOIN customers c
ON c.phonenumber = j.customerphonenum
INNER JOIN dogs d
ON d.ownerphonenum = c.phonenumber
) GROUP BY walkername, dogname;
Если starttime
и endtime
равны TIMESTAMP
с, тоЯ бы предложил привести их к DATE
, чтобы упростить арифметику:
SELECT walkername, dogname, SUM(walktime) * 24 FROM (
SELECT w.lastname || ', ' || w.firstname AS walkername
, d.name AS dogname
, CAST(endtime AS DATE) - CAST(starttime AS DATE) AS walktime
FROM walkers w INNER JOIN jobs j
ON w.phonenumber = j.walkerphonenum
INNER JOIN customers c
ON c.phonenumber = j.customerphonenum
INNER JOIN dogs d
ON d.ownerphonenum = c.phonenumber
) GROUP BY walkername, dogname;
Надеюсь, это поможет.