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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - 如何在此查询中过滤少于12的PRODUCT_AGE。我的示例返回错误[关闭]相关的知识,希望对你有一定的参考价值。

我正在努力让产品组的产品的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_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帖子。

以上是关于SQL - 如何在此查询中过滤少于12的PRODUCT_AGE。我的示例返回错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

查询在 JDBC 中使用时返回的行数少于 SQL 开发人员

在 Spark sql 中按二进制类型过滤

在 oracle sql 12c 中可以绕过分区吗?

sql - 有没有办法过滤SELECT查询的结果,使用另一个SELECT查询?

如何在 3 层架构中处理多条件查询

错误(12,1):PL/SQL:语句被忽略错误(12,15):PLS-00405:在此上下文中不允许子查询