【发布时间】:2018-08-08 14:30:09
【问题描述】:
我正在尝试获取 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 列出了产品及其产品组。
我做错了什么?如何让我的查询正确过滤?
【问题讨论】:
-
你试过什么?此外,那堵文字墙很难阅读。您需要使其易于阅读和理解。
-
该查询在没有所需过滤器的情况下工作 - DATEDIFF(MONTH, MIN(SHIP_TABLE.SHIPDATE),GETDATE())
-
更正,我已经按产品组 ID 确定了第一个发货日期,我试图仅筛选出产品组的首次发货日期小于 12 个月的产品。当我添加过滤器时,此查询返回并聚合错误
-
当您拥有
MIN(SHIP_TABLE.SHIPDATE) FIRST_SHIPPED时,您是否正在尝试创建别名。这样MIN(SHIP_TABLE.SHIPDATE)的结果将具有FIRST_SHIPPED的列名? -
请描述观察到的行为(包括任何确切的错误消息)以及它与预期行为有何不同。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括期望的行为、特定问题或错误以及重现它所需的最短代码问题本身。没有清晰的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。
标签: sql reference aggregate outer-join having-clause