Использование datediff в подзапросе для расчета исторических c возраста - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь создать представление об открытых заказах интернет-магазина. У меня есть таблица со всеми ордерами и соответствующими датами (create_date, closed_cate), все они закрыты сегодня.

На первом шаге я хочу вычислить средний возраст открытых ордеров для любого дня:

select
c.DATE,
 (SELECT avg(datediff('days', ord.ORDER_DATE, c.DATE))
    FROM "Orders" ord
        WHERE c.DATE>=ord.ORDER_DATE AND c.DATE<=ord.Order_close_date
    )
FROM CALENDAR c
WHERE c.DATE<=CURRENT_DATE() 
ORDER BY c.DATE desc

При выполнении этого я получу код ошибки: "SQL Ошибка компиляции: неподдерживаемый тип подзапроса не может быть оценен"

Есть ли способ решить это? Результат должен быть средним для каждого дня. Любой вклад высоко ценится!

1 Ответ

0 голосов
/ 26 марта 2020

Один метод является рекурсивным CTE:

with cte as (
      select o.order_date as dte, o.order_close_date, 0 as days_aging
      from "Orders" o
      union all
      select o.order_date + interval '1 day', o.order_close_date, days_aging + 1
      from cte
      where dte < o.order_close_date
     )
select dte, avg(days_aging)
from cte
group by dte;
...