2010-12-01 92 views
0

今天有一个完整的SQL智能失效,无法弄清楚。 ColdFusion和MS AccessSQL ...基于其他字段的最大值获取字段值

我正在寻找在ColdFusion中查询查询。

原始查询:

<cfquery name="myQuery" datasource="xxx"> 
SELECT Name, ID, tblLoc.Directions, tblLoc.LocationOrder 
FROM myTable 
WHERE .....    
ORDER BY tblLoc.LocationOrder 
</cfquery> 

我想从这个查询,我检索路线,其中LocationOrder是最大创建另一个查询。

因此,如果更改为MyQuery返回:

Name  ID  Directions  LocationOrder 
AA   10   AAAAAA   1 
BB   11   BBBBBB   2 

My QoQ would return: 

Directions 
BBBBBB 

但看似简单的SQL我已经试过的每次迭代失败。我必须半睡半醒。

<cfquery name="latestDirections" dbtype="query"> 
SELECT Directions 
FROM myQuery 
WHERE LocationOrder=(select max(LocationOrder) from myQuery) 
</cfquery> 

<cfquery name="latestDirections" dbtype="query"> 
SELECT Directions, MAX(LocationOrder) as maxLocationOrder 
FROM get_sel_locations 
</cfquery> 

nope ...既不会。

+0

你的第一个看起来像它应该工作中列出的功能/语法。 `SELECT Directions FROM myQuery WHERE LocationOrder =(从myQuery中选择max(LocationOrder))` – 2010-12-01 14:14:24

+0

我同意但我得到这个错误:Query Of Queries语法错误。 遇到“LocationOrder =(选择。不正确的条件表达式,期望[like | null | between | in | comparison]条件之一, – stuttsdc 2010-12-01 14:31:29

+1

QoQ不支持该类型的子查询。它们在内存中(而不是数据库)查询,*只*支持文档中列出的语法。 http://livedocs.adobe.com/coldfusion/8/using_recordsets_3.html。 – Leigh 2010-12-01 16:02:11

回答

0
SELECT Name, ID, tblLoc.Directions, tblLoc.LocationOrder 
FROM myTable 
WHERE .....    
ORDER BY tblLoc.LocationOrder DESC LIMIT 1; 

应该做你。您在max LocationOrder的指示将通过排序和限制处理。

0

另一种可能性,如果我理解正确的问题是:

SELECT X FROM table_name的WHERE Y =(SELECT MAX(Y)FROM表名)

0

如果你消除更改为MyQuery ORDER BY子句中会发生什么?另外,说出查询失败的方式。你得到了什么结果?

0

鉴于你得到的错误,你可以试试这个:

-- remove the parentheses 
WHERE LocationOrder=select max(LocationOrder) from myQuery   

-- use IN instead of equals even though your subquery returns a single scalar value and '=' should be fine. 
WHERE LocationOrder IN (select max(LocationOrder) from myQuery) 
1

...The second, "Column get_sel_locations.Directions is invalid in the SELECT list clause because it is not contained in an aggregate function and there is no GROUP BY clause"

错误是相当清楚的。您缺少GROUP BY子句。当使用像MAX()这样的聚合时,您必须对任何非聚合列的结果进行GROUP。在这种情况下:路线

SELECT Directions, MAX(LocationOrder) as maxLocationOrder 
FROM get_sel_locations 
GROUP BY Directions 

更新但是,如果只是你想要的一切最大,然后Yisroel的查询可能是你想要的东西。

更新正如在评论中提到的,QoQ是而不是数据库查询。他们只支持文档http://livedocs.adobe.com/coldfusion/8/using_recordsets_3.html

0

你可以先做环比,以获得最大的位置

<cfquery name="maxDirections" dbtype="query"> 
    SELECT max(LocationOrder) as maxLocation 
    FROM myQuery 
</cfquery> 

<cfquery name="latestDirections" dbtype="query"> 
    SELECT Directions 
    FROM myQuery 
    WHERE LocationOrder = '#maxDirections.maxLocation#' 
</cfquery>