Sql 返回最大值的数据(不影响最大值的结果)

Sql 返回最大值的数据(不影响最大值的结果),sql,max,ms-access-2010,Sql,Max,Ms Access 2010,我想返回我们是否在特定地点提供服务。继承人是邮政编码>州>全国 因此,如果您输入一个TX邮政编码,它将首先查看是否有邮政编码条目。如果没有,它将检查发送条目。如果仍然没有点击,它将检查全国的政策 为了实现这一点,我有一个Calc字段,用于指示具体程度。邮政编码为3级,州=2,CW=1。因此,一个简单的MAX将让我知道我正在处理的数据级别。我的查询示例如下: SELECT Service_Availability.Service_Product, MAX(Service_Availability.

我想返回我们是否在特定地点提供服务。继承人是邮政编码>州>全国

因此,如果您输入一个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)。我希望db看到我有zip级别的数据,并使用它来确定可用性(FALSE)


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

您需要将初始查询(几乎)作为子查询进行内部联接,以使其正常工作:

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

您需要将初始查询(几乎)作为子查询进行内部联接,以使其正常工作:

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


现在还不清楚你想做什么。请发布您的表结构一些示例数据,然后是所需的结果。您可以使用另一种模式来代替MAX/GROUP BY。。。它是将SELECT TOP 1与ORDER BY相结合。很多时候,它使你的逻辑更简单。我建议探索一下。@Dave:OP似乎没有寻找一个记录结果,所以TOP 1在这里不起作用。你能提供一些示例数据和期望的结果吗?您正在谈论邮政编码,您的示例查询是选择
服务\产品
,它是按
运营商\产品
分组的。我很困惑。@marc_我正在使用Access 2010。我曾尝试将Access添加为标记,但它说我太新了,无法发明标记,对不起。现在还不清楚您想做什么。请发布您的表结构一些示例数据,然后是所需的结果。您可以使用另一种模式来代替MAX/GROUP BY。。。它是将SELECT TOP 1与ORDER BY相结合。很多时候,它使你的逻辑更简单。我建议探索一下。@Dave:OP似乎没有寻找一个记录结果,所以TOP 1在这里不起作用。你能提供一些示例数据和期望的结果吗?您正在谈论邮政编码,您的示例查询是选择
服务\产品
,它是按
运营商\产品
分组的。我很困惑。@marc_我正在使用Access 2010。我曾尝试将Access添加为标记,但它说我太新了,无法发明标记,对不起。您对这项功能的解释正是我想要的,所以我们在同一页上。但是,您的查询(第一个)显示了服务可用的最高特定级别。例如,服务A在状态中可用,但在zip中不可用,因此它不应显示在列表中。然而,我看到的是,它显示的特殊性为2(状态级别)。“服务a”是否有一个zip表条目(特殊性=3),
state
设置为“TX”或“CW”,并且
Available
设置为
FALSE
?它可能不会,因为对于zip特定性,
State
字段可能会包含一个zipcode,对吗?如果是这样,那么您需要扩展WHERE子句来搜索该状态的所有可能状态值——这将包括所有zipcodes。如果这些代码(state和zip)存在于某个表中,则可以执行联合搜索…关闭。可用性表有STATE、ZIP_代码、AVAILABLE和specification字段。State将始终包含State,zip将包含zip或“DEFAULT”。所以服务A有一个NE 68123 FALSE 3的条目(state、zip、available、spec)。还有一个服务条目A NE DEFAULT TRUE 2::)肯定在正确的轨道上,但存在两个问题。我认为您无法解决这些问题,因此我将接受您的解决方案。1,它返回一些额外的结果,这些结果是重复的。例如,服务C将在列表中显示两次,具有相同的特殊性。奇怪,但不一定是个问题。没有可辨别的模式来区分那些被复制者和那些没有被复制者。2,一项服务根本不在列表中,即使它在规范级别2可用。不过,还有一个完全相同的服务出现了,所以我不知道为什么。。。。。。服务C和服务D都有一个zip条目(FALSE)和一个状态条目(TRUE)。服务C返回,但D不返回。看起来几乎是武断的。你对这个功能的解释正是我想要的,所以我们在同一页上。但是,您的查询(第一个)显示了服务可用的最高特定级别。例如,服务A在状态中可用,但在zip中不可用,因此它不应显示在列表中。然而,我看到的是,它显示的特殊性为2(状态级别)。“服务a”是否有一个zip表条目(特殊性=3),
state
设置为“TX”或“CW”,并且
Available
设置为
FALSE
?它可能不会,因为对于zip特定性,
State
字段可能会包含一个zipcode,对吗?如果是这样,那么您需要扩展WHERE子句来搜索该状态的所有可能状态值——这将包括所有zipcodes。如果这些代码(state和zip)存在于某个表中,则可以执行联合搜索…关闭。可用性表具有状态,