SQL查询选择除最大值之外的所有内容

时间:2009-07-25 19:08:29

标签: mysql sql mysql-error-1111

我有这个相当复杂的查询,从三个表中获取数据,现在我希望它更复杂(哦,亲爱的)!

我希望最后发布的功能显示在页面的自己的部分中,通过选择表格中的最后一个条目,这很容易。但是,对于复杂的查询(网站的主页),我希望不能显示此功能。

我想union对我之前的查询进行以下查询,但它没有返回正确的结果:

SELECT
    features.featureTitle AS title, 
    features.featureSummary AS body, 
    features.postedOn AS dummy, 
    DATE_FORMAT( features.postedOn,  '%M %d, %Y' ) AS posted, 
    NULL, 
    NULL, 
    staff.staffName, 
    features.featureID 
FROM 
    features 
    LEFT JOIN staff ON 
        features.staffID = staff.staffID 
WHERE features.postedOn != MAX(features.postedOn)
ORDER BY dummy DESC LIMIT 0,15

此查询返回以下错误:

  

MySQL错误:#1111 - 无效使用群组功能

有什么方法吗?

2 个答案:

答案 0 :(得分:6)

max查询需要在自己的子查询中,所以最终的SQL应该是::

SELECT features.featureTitle AS title,
    features.featureSummary AS body, 
    features.postedOn AS dummy,
    DATE_FORMAT( features.postedOn,  '%M %d, %Y' ) AS posted,
    NULL,
    NULL,
    staff.staffName,
    features.featureID 
FROM 
    features 
    LEFT JOIN staff ON 
        features.staffID = staff.staffID
WHERE
   features.postedOn != (select max(features.postedOn) from features)

答案 1 :(得分:0)

你遇到的问题是你需要从表中找到最大(最新)功能,同时遍历每一行,但MAX()是一个组功能 - 你必须将所有行分组才能使用它。

您可以使用子选择来获取最后一个要素的ID:

WHERE featureId <> (SELECT featureId From features ORDER BY postedOn DESC LIMIT1)

这种方法存在问题 - 每行都会运行子选择,但这并不贵。