MySQL需要返回group by内结果集中的特定记录

标签 mysql select join group-by

我需要构建一个 MySQL 查询,在其中可以根据一个或多个列值将结果分组在一起,然后返回该组中与某些条件匹配的完整记录。

以下表代表我的数据:

| ID | NAME | Editor | Modified date | Type |
|  1 | doc1 | Smith  | 2012-01-01    | A    |
|  2 | doc2 | Smith  | 2012-03-03    | A    |
|  3 | doc1 | Jones  | 2012-10-10    | A    |
|  4 | doc1 | Scott  | 2011-01-01    | A    |
|  5 | doc2 | Boyd   | 2013-01-01    | A    |
|  6 | doc3 | Smith  | 2010-01-01    | B    |
|  7 | doc4 | Smith  | 2010-03-03    | B    |
|  8 | doc3 | Jones  | 2010-10-10    | B    |
|  9 | doc3 | Scott  | 2009-01-01    | B    |
| 10 | doc4 | Boyd   | 2011-01-01    | B    |

我想返回与任何文档相关的最近修改的记录。

| ID | NAME | Editor | Modified date | Type |
|  3 | doc1 | Jones  | 2012-10-10    | A    |
|  5 | doc2 | Boyd   | 2013-01-01    | A    |
|  8 | doc3 | Jones  | 2010-10-10    | B    |
| 10 | doc4 | Boyd   | 2011-01-01    | B    |

或者最近修改的与类型A相关的记录

| ID | NAME | Editor | Modified date | Type |
|  3 | doc1 | Jones  | 2012-10-10    | A    |
|  5 | doc2 | Boyd   | 2013-01-01    | A    |

我已经尝试过 GROUP BY 和 HAVING,据我所知,它们不会返回整个记录。

附录:我可能需要将“最近”限定符更改为“给定日期之前”

最佳答案

使用子查询:

SELECT tbl.* FROM tbl
INNER JOIN (
    SELECT max(Modifed_date) as newestRecordDate, Editor
    FROM tbl
    GROUP BY Editor
) as Newest
on tbl.Modifed_Date = Newest.NewestRecordDate

按类型:

SELECT * FROM tbl
INNER JOIN (
    SELECT max(Modifed_date) as newestRecordDate, Editor
    FROM tbl
    GROUP BY Editor
) as Newest
ON tbl.Modifed_Date = Newest.NewestRecordDate
WHERE Type = 'A'

请注意,修改日期可能不包含时间,并且每天进行多次编辑 - 确保此记录也包含时间部分。

关于MySQL需要返回group by内结果集中的特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857195/

相关文章:

mysql - 在 Ruby 和 MySQL 中保持数据最新

ruby-on-rails - Ruby on Rails - 不选择给定字段

php - 2 个表之间的右外连接

mysql - #1130 - 不允许主机 ‘localhost’ 连接到此 MySQL 服务器

mysql - 在 MYSQL 5.1 中使用@DECLARE

mysql - 报告结果 - SQL 可以改进吗?

sql - Rails 中相乘的列的总和

sql - 使用 OR 在多个列上优先加入 JOIN

php - 将两个查询合并为一个

javascript - 通过 PHP 在 javascript 中回显 MySQL 结果