我想知道我们是否在特定地点提供服务。 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)。
我理解为什么我的代码是错误的方法,但我不确定从哪个方向来。感谢帮助!
答案 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