2010-12-01 91 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>