[英]SQL Query to Select Everything Except the Max Value
我有一个相当复杂的查询,它从三个表中获取数据,现在我希望它更复杂(天哪)!
我希望最后发布的功能显示在它自己的页面部分,通过选择表格中的最后一个条目,这很容易。 但是,对于复杂的查询(网站的主页),我希望能够不显示此功能。
我想将以下查询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 - 组 function 的使用无效
有没有办法解决?
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)
你遇到的问题是你需要从表中找到最大(最新)功能,同时遍历每一行,但MAX()是一个组功能 - 你必须将所有行分组才能使用它。
您可以使用子选择来获取最后一个功能的ID:
WHERE featureId <> (SELECT featureId From features ORDER BY postedOn DESC LIMIT1)
这种方法存在问题 - 每行都会运行子选择,但这并不昂贵。
您还可以按 PostedOn 字段降序排列并添加 OFFSET 1,这将从第二行开始显示您的结果。
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
ORDER BY features.postedOn DESC
OFFSET 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.