每个ID限制一行(MySQL)
我在MySQL查询中加入了几个表,它们通过员工id号链接 ID号在表A和B中是唯一的,但在表C中有多行,每个条目的日期(存储为字符串)是唯一的 我需要在表C中确定每个员工ID号的最新日期,并将表C中每个ID号限制为一个条目(最新的日期) 我不确定如何将每个员工ID号的限制设置为1 非常感谢您的帮助。下面的查询使用子查询获取每个ID限制一行(MySQL),mysql,sql,join,greatest-n-per-group,Mysql,Sql,Join,Greatest N Per Group,我在MySQL查询中加入了几个表,它们通过员工id号链接 ID号在表A和B中是唯一的,但在表C中有多行,每个条目的日期(存储为字符串)是唯一的 我需要在表C中确定每个员工ID号的最新日期,并将表C中每个ID号限制为一个条目(最新的日期) 我不确定如何将每个员工ID号的限制设置为1 非常感谢您的帮助。下面的查询使用子查询获取表C上每个员工ID的每个最近日期 SELECT a.*, b.*, c.* FROM tableA a INNER JOIN tableB b
表C
上每个员工ID的每个最近日期
SELECT a.*, b.*, c.*
FROM tableA a
INNER JOIN tableB b
ON a.EmployeeID = b.EmployeeID
INNER JOIN tableC c
ON a.EmployeeID = c.EmployeeID
INNER JOIN
(
SELECT EmployeeID, MAX(date) max_date
FROM tableC
GROUP BY EmployeeID
) d ON c.EmployeeID = d.EmployeeID AND
c.Date = d.max_date
根据我对你问题的理解:
select a.*, b.*, max(c.date) from A
inner join B on A.id=B.id
inner join C on A.id=C.id
group by A.id
这将按A的ID对记录进行分组。也就是说,您将在响应中为A中的每一行获取一行(因为它们由该ID唯一标识)。B也会发生同样的情况,因为它们具有相同的ID。然后,在C中,A中的每条记录都有多条记录,因此对它们进行分组并获取最大日期只会返回一个C/A的日期(每种情况下的最大日期) (是的,我承认很难找到)。我检查了手册,没有找到在另一个字段中为每个实例声明一行的方法。我只是想知道这里是否缺少一个不同的函数。MySQL中没有(我相信PostreSQL中也有),真的,我给你指的链接就是答案(去掉你的限制,这在其他方面已经得到了保证)。我明白了,链接指向的是特定的页面吗?因为当我点击它时,我发现一个页面没有找到。啊,该死,它确实坏了:,我道歉!谢谢你的回复。在阅读了上面的Wrikkens文章链接之后,我能够在WHERE子句中添加一个子查询。我使用了左连接,而不是内部连接。我在这里遵循您的逻辑,但是声明max(c.date),这不会只返回整个字段中最大的一个日期吗?或者不是这样,因为它是按a.id分组的?我想我会用任何一种方法来测试它。它将返回最大的日期,并且由于您是按A.id分组的,因此将返回特定A.id的最大日期(据我所知,这就是您要查找的)