问题描述
我有这个查询,返回的是12个月内未售出的产品:
SELECT OITM.ItemCode,ItemName
FROM OITM LEFT OUTER JOIN (
SELECT ItemCode FROM RDR1 WHERE DocDate > DATEADD(yy,-1,GetDate()) GROUP BY ItemCode
) RDR1 ON OITM.ItemCode = RDR1.ItemCode
WHERE OnHand > 0 AND RDR1.ItemCode IS NULL
我想创建不同的查询来提取不同日期范围内的项目。即1至3个月未售出的产品; 3至6个月; 6至9个月; 9至12个月;超过12个月。
这些都可以在不同的报告中,但是如果它们可以在一个报告中并且可以标识它们属于哪个日期范围,那就太好了。
我尝试使用以下查询编写查询:
SELECT OITM.ItemCode,ItemName
FROM OITM LEFT OUTER JOIN (
SELECT ItemCode FROM RDR1 WHERE DocDate >= DATEADD(mm,GetDate()) AND DocDate < DATEADD(mm,-3,GetDate()) GROUP BY ItemCode) RDR1 ON OITM.ItemCode = RDR1.ItemCode
WHERE OnHand > 0 AND RDR1.ItemCode IS NULL
谢谢。
解决方法
我不相信你。您说您不希望3-6个月前订购商品。这似乎完全没有用。您可能希望最近12个月,最近9个月,至少6个月和最近3个月未订购商品。
但是,即使那样也没有道理。只需输入当天-或过去多长时间-自订购商品以来。
要获取此信息,请使用聚合:
SELECT OITM.ItemCode,OITM.ItemName,DATEDIFF(day,MAX(RDR1.DocDate),GETDATE()) as days_since_last_order
FROM OITM
RDR1
ON OITM.ItemCode = RDR1.ItemCode
WHERE OITM .OnHand > 0
GROUP BY OITM.ItemCode,OITM.ItemName;