Если используются подзапросы, НЕ используйте ORDER BY внутри этих подзапросов. Нет ничего хорошего в заказе, просто он не требуется.
Попробуйте:
SELECT
x.OVERALL_ID
, extract(year FROM y.tsdate) AS year
, extract(month FROM y.tsdate) AS month
, round(sum(y.grossamount), 2) AS "labour cost"
, sum(y.reg) + sum(y.ot) AS "labour hours"
FROM (
SELECT DISTINCT
OVERALL_ID
, BOAT_NAME
FROM TV_VESSEL_VISIT
) x
INNER JOIN (
SELECT *
FROM TRANS
WHERE ratedesc = 'Labour'
AND opsdesc = 'Ops'
AND ACTDESC = 'Nature of Job'
AND terminal = 'UKN'
AND reconciled = 'Y'
AND TSDATE >= to_date('2020-01-01','yyy-mm-dd') AND TSDATE < to_date('2020-02-01','yyyy-mm-dd')
) y ON x.BOAT_NAME = y.BOATNAME
GROUP BY
OVERALL_ID
, extract(year FROM tsdate)
, extract(month FROM tsdate)
ORDER BY
OVERALL_ID
, extract(year FROM tsdate)
, extract(month FROM tsdate)
;
Примечания: я удалил ненужный ORDER BY в верхнем подзапросе и изменил это использовать SELECT DISTINCT (он даст тот же результат, что и предыдущая группа по подзапросу). Также я изменил синтаксис, используемый для диапазона дат. Пожалуйста, не используйте 2 di git ссылки на год, всегда используйте полный год. Кроме того, я всегда рекомендую избегать использования between
для диапазонов дат, гораздо более предсказуемо использовать комбинацию >=
с <
, как вы видели выше. Кроме того, я использовал to_date()
, поэтому стало ясно, какие даты я использую для диапазона дат - что даст вам каждую строку данных, относящихся к январю 2020 года.
Предыдущий синтаксис between
может пропустить данные за весь день