选择除max(列)之外的所有值,其中max(列)具有不同的值

时间:2018-03-05 19:48:33

标签: mysql sql

我有一个名为document_versions的表,如下所示:

CREATE TABLE `document_versions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `document_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `document` text,
  `created_on` datetime NOT NULL,
  `version` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

我想在document_id列表中选择除了每个文档的最大(版本)之外的所有文件。我可以获得document_ids列表的所有条目,没有任何问题。问题是当我需要设置“除了最大(版本)之外的所有”的约束。我一直这样做,显然不能正常工作:

SELECT * FROM document_versions WHERE document_id IN (SELECT document_id FROM documents WHERE account_id=?) AND version < (SELECT MAX(version) FROM document_versions)

有没有办法在第二个子选择中应用document_id约束,或者我是以错误的方式接近它?

1 个答案:

答案 0 :(得分:1)

您可以使用:

SELECT * 
FROM document_versions 
WHERE (document_id, id) NOT IN (SELECT document_id, MAX(id)
                            FROM document_versions
                            WHERE account_id = ?
                            GROUP BY document_id)
  AND account_id = ?;