我有三张桌子
supplier(id_supp, name, adress, ...)
Customer(id_cust, name, adress, ...)
Order(id_order, ref_cust, ref_supp, date_order...)我想做一个工作,计算由Supplier的订单数量,为last_week,last_two_weeks与Talend
select
supp.name,
(
select
count(*)
from
order
where
date_order between sysdate-7 and sysdate
nd ref_supp=id_supp
) as week_1,
(
select
count(*)
from
order
where
date_order between sysdate-14 and sysdate-7
nd ref_supp=id_supp
) as week_2
from supplier supp我这样做的原因是我的查询花了很多时间
发布于 2016-08-30 02:11:54
您需要在supplier和order之间进行连接才能获得供应商名称。我显示了一个内部联接,但是如果您需要所有的供应商(即使是那些在order表中没有订单的供应商),您可以将它更改为一个左外部联接。
除此之外,您应该只需读取order表一次,即可获得所需的所有信息。您的查询不只执行一次(读取查询的解释计划),这可能是耗时过长的原因。
注意:sysdate有一个time-of-day组件(也许date_order值也有);您编写查询的方式可能会执行,也可能不会执行。您可能需要使用trunc()包围sysdate。
select s.name,
count(case when o.date_order between sysdate - 7 and sysdate then 1 end)
as week_1,
count(case when o.date_order between sysdate - 14 and sysdate - 7 then 1 end)
as week_2
from supplier s inner join order o
on s.id_supp = o.ref_supp
;https://stackoverflow.com/questions/39212251
复制相似问题