Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个ID限制一行(MySQL)_Mysql_Sql_Join_Greatest N Per Group - Fatal编程技术网

每个ID限制一行(MySQL)

每个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

我在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 
            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的最大日期(据我所知,这就是您要查找的)