我有以下表结构
表格销售:
ID, SALES_DATE
表sales_payment:
ID, SALES_ID, PAYMENT_DATE
其中SALES_ID
是销售表ID
的外键。 table sales_payment与表销售有多对一关系,其中一个销售可以有多个付款(例如今天付款和五天后另一个付款)
我想要一个查询,可以计算每个销售的平均总付款天数,以及完全支付销售额的最大天数。
考虑这种情况:
第一次销售是在2014-01-01
进行的,其付款是
2014-01-02
2014-01-05
(支付销售天数 4
天)
第二次销售是在2014-01-03
进行的,其付款位于:
2014-01-03
2014-01-04
2014-01-05
2014-01-11
(支付销售天数为8
天)
因此,返回平均值是每次销售完全支付的平均天数:
(4+8)/2 = (6 days)
我已经在编程级别上做了这个,但是花费太多时间来检索数据并为数千个原始数据执行循环。如何在sql级别实现这一点?
答案 0 :(得分:1)
如果我理解正确,您首先要计算每次销售的付款天数。然后取这个值的平均值:
select avg(paymentdays)
from (select sp.sales_id, (datediff(max(sp.payment_date), min(sp.payment_date)) + 1) as paymentdays
from sales_payment sp
group by sp.sales_id
) sp;
答案 1 :(得分:1)
我认为这样可以解决您的问题(如果我理解了,您希望从sales.sales_date
开始计算几天):
select sp.sales_id, avg(paymentdays)
from (select sp.sales_id, ( max(sp.payment_date) - min(s.sales_date) ) as paymentdays
from sales_payment sp, sales s
where sp.sales_id = s.id
group by sp.sales_id
) sp
group by sp.sales_id