返回MAX值的数据(不影响MAX的结果)

时间:2013-01-02 15:57:08

标签: sql max ms-access-2010

我想知道我们是否在特定地点提供服务。 heirarchy是邮政编码>状态>全国

因此,如果您输入TX邮政编码,它将首先查看是否有zip条目。如果没有,它将检查TX条目。如果仍然没有点击,它将检查全国范围的政策。

为实现这一目标,我有一个Calc字段,表明具体程度。邮政编码为3级,状态= 2,CW = 1。所以一个简单的MAX会让我知道我正在处理的数据级别。我对此的查询示例是:

SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec
FROM Service_Availability
WHERE Service_Availability.State = "TX" OR Service_Availability.State = "CW"
GROUP BY Service_Product;

现在我的问题出现了。

我想知道服务是否以最高的特异性提供。但是,我没有正确的方法......

SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec
FROM Service_Availability
WHERE (Service_Availability.State = "TX" OR Service_Availability.State = "CW") 
AND Service_Availability.Available = TRUE
GROUP BY Service_Product;

这将返回服务可用时的最高特异性,而不是服务是否具有最高特异性。

换句话说,假设拉链是68123(奥马哈,内布拉斯加州)。

我的数据库显示我们确实在内布拉斯加州提供服务,但无论出于何种原因,我们都无法在奥马哈(68123)提供服务。我希望数据库看到我有压缩级别数据,并使用它来确定可用性(FALSE)。

我理解为什么我的代码是错误的方法,但我不确定从哪个方向来。感谢帮助!

1 个答案:

答案 0 :(得分:1)

您需要INNER JOIN初始查询(几乎)作为子查询才能使其生效:

SELECT Service_Availability.Service_Product, Service_Availability.Specificity 
FROM Service_Availability 
INNER JOIN (
    SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec
    FROM Service_Availability
    WHERE (Service_Availability.State = "TX" OR Service_Availability.State = "CW")
    GROUP BY Service_Availability.Service_Product ) max_spec
  ON Service_Availability.Service_Product = max_spec.Service_Product
  AND Service_Availability.Specificity = max_spec.Spec
WHERE Service_Availability.Available = TRUE