每个ID限制一行(MySQL)

时间:2013-03-09 21:12:42

标签: mysql sql join greatest-n-per-group

我在MySQL查询中加入了几个表,它们按员工ID号链接。

表编号在表A和表B中是唯一的,但在表C中有多行,日期(存储为字符串)对于每个条目都是唯一的。

我需要将表C和LIMIT表C中每个员工ID号的最新日期标识为每个ID号一个条目(显然是最近的)。

我不确定如何为每个员工ID号设置LIMIT为1。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

下面的查询使用子查询EmployeeID上的每个tableC获取每个最近日期

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

答案 1 :(得分:0)

根据我在你的问题上的理解:

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中每个记录有多个记录,因此对它们进行分组并获得日期的最大值将只返回每个A的C日期(每种情况下它们的最大值)。