SQL ...根据另一个字段的最大值从字段获取值

时间:2010-12-01 14:11:30

标签: sql coldfusion

今天有一个完整的SQL精神失效,无法解决这个问题。 ColdFusion和MS Access

我想在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>

不......也不会这样做。

6 个答案:

答案 0 :(得分:1)

  

......第二个,“专栏   get_sel_locations.Directions是   SELECT list子句中无效   因为它不包含在   聚合函数并没有   GROUP BY子句“

错误很清楚。您缺少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

中列出的函数/语法

答案 1 :(得分:0)

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

应该做你。您在最大LocationOrder的路线将通过排序和限制来处理。

答案 2 :(得分:0)

另一种可能性,如果我正确理解了这个问题:

SELECT x FROM table_name WHERE y =(SELECT MAX(y)FROM table_name)

答案 3 :(得分:0)

如果从myQuery中删除ORDER BY子句会发生什么?另外,请说出查询失败的原因。你得到了什么结果?

答案 4 :(得分: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)

答案 5 :(得分:0)

您可以先做一个QoQ来获取最大位置

<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>