SQL 选择日期在定义的日期范围内的项目

SQL Selecting an item where its date falls between a defined date range

我查询 returns 个产品在 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,-1,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 个月、lsat 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;