我正在努力让产品组的产品的PRODUCT_AGE少于12个月。
这是我目前的查询:
SELECT MIN(SHIP_TABLE.SHIPDATE) FIRST_SHIPPED, PRODUCT_TABLE.PRODUCT_GROUP_ID,
DATEDIFF(MONTH,MIN(SHIP_TABLE.SHIPDATE),GETDATE()) PRODUCT_AGE
FROM SHIP_TABLE
LEFT JOIN PRODUCT_TABLE ON PRODUCT_TABLE.PRODUCT_ID = SHIP_TABLE.PRODUCT_ID
WHERE SHIP_TABLE.PRODUCT_ID BETWEEN '101000000' and '999999999' AND
PRODUCT_TABLE.PRODUCT_GROUP_ID IS NOT NULL AND
DATEDIFF(MONTH, MIN(SHIP_TABLE.SHIPDATE),GETDATE()) <= 12
GROUP BY PRODUCT_TABLE.PRODUCT_GROUP_ID
ORDER BY PRODUCT_TABLE.PRODUCT_GROUP_ID ASC
此查询返回聚合错误。
我尝试过使用子查询;但是,也无法让它发挥作用。
SHIP_TABLE列出了所有产品的日期;同时,PRODUCT_TABLE列出了产品及其产品组。
我究竟做错了什么?如何才能让我的查询正确过滤?
当你有MIN(SHIP_TABLE.SHIPDATE) FIRST_SHIPPED
和DATEDIFF(MONTH,MIN(SHIP_TABLE.SHIPDATE),GETDATE()) PRODUCT_AGE
时,我相信你正在尝试使用别名。这是不正确的语法。别名与as
关键字一起使用:
MIN(SHIP_TABLE.SHIPDATE) AS FIRST_SHIPPED
DATEDIFF(MONTH,MIN(SHIP_TABLE.SHIPDATE),GETDATE()) AS PRODUCT_AGE
在你的where子句中你有:
DATEDIFF(MONTH, MIN(SHIP_TABLE.SHIPDATE),GETDATE()) <= 12
我相信这会导致错误;可能,你的汇总错误。你应该使用having子句。有关更多信息,请参阅this帖子。