sql - 计算订单之间的平均天数 最后三个记录 tsql
问题描述
我试图取每个客户的平均值,但你没有按客户分组。我想从名为发票的表格中计算几个订单日期之间的平均天数。对于每个 BusinessPartnerID,订单之间的平均天数是多少,我想要最后三个记录订单的平均天数。我得到了每个用户的所有订单的平均值,但需要最后三个记录订单 的天数示例表如下
;WITH temp (avg,invoiceid,carname,carid,fullname,mobail)
AS
(
SELECT AvgLag = AVG(Lag) , Lagged.idinvoice,
Lagged.carname ,
Lagged.carid ,Lagged.fullname,Lagged.mobail
FROM
(
SELECT
(car2.Name) as carname ,
(car2.id) as carid ,( busin.Name) as fullname, ( busin.Mobile) as mobail , INV.Id as idinvoice , Lag = CONVERT(int, DATEDIFF(DAY, LAG(Date,1)
OVER (PARTITION BY car2.Id ORDER BY Date ), Date))
FROM [dbo].[Invoice] AS INV
JOIN [dbo].[InvoiceItem] AS INITEM on INV.Id=INITEM.Invoiceid
JOIN [dbo].[BusinessPartner] as busin on busin.Id=INV.BuyerId and Type=5
JOIN [dbo].[Product] as pt on pt.Id=INITEM.ProductId and INITEM.ProductId is not null and pt.ProductTypeId=3
JOIN [dbo].[Car] as car2 on car2.id=INv.BusinessPartnerCarId
) AS Lagged
GROUP BY
Lagged.carname,
Lagged.carid,Lagged.fullname,Lagged.mobail, Lagged.idinvoice
-- order by Lagged.fullname
)
SELECT * FROM temp where avg is not null order by avg
解决方案
我真的不明白您的查询与您的问题有何关系。从invoice
具有列businesspartnerid
和的名为的表开始date
,您将如何获取每个业务伙伴的最后 3 张发票之间的日差平均值:
select businesspartnerid,
avg(1.0 * datediff(
day,
lag(date) over(partition by businesspartnerid order by date),
date
) avg_diff_day
from (
select i.*,
row_number() over(partiton by businesspartnerid order by date desc) rn
from invoice i
) i
where rn <= 3
group by businesspartnerid
请注意,3 行仅给您 2 个间隔,这将被平均。
推荐阅读
- python - PYODBC 连接错误:函数最多接受 1 个非关键字参数
- android - 如何将存储库中的分支添加到另一个存储库的分支
- elasticsearch - 对过滤的数据应用复合聚合
- c - 铿锵在哪里
头文件? - amazon-web-services - Amazon EKS 上带有 NGINX 入口控制器的网络负载均衡器始终返回 503 错误
- python - 如何在循环遍历其行时替换原始数据框中的值?
- c# - 有没有办法使用编辑器窗口并将复制的组件存储到内存(剪贴板)?
- python - 如何计算文本中字母的频率,不包括空格和数字?
- arrays - 如何在不删除公式其他列的情况下删除重复项?
- javascript - 使用 Jquery 添加和删除行表