SQL - 如何在此查询中过滤少于12的PRODUCT_AGE。我的示例返回错误[关闭]

问题描述 投票:-2回答:1

我正在努力让产品组的产品的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列出了产品及其产品组。

我究竟做错了什么?如何才能让我的查询正确过滤?

sql reference aggregate outer-join having-clause
1个回答
0
投票

当你有MIN(SHIP_TABLE.SHIPDATE) FIRST_SHIPPEDDATEDIFF(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帖子。

© www.soinside.com 2019 - 2024. All rights reserved.