MySQL:从组中选择最后一个,但有条件
我有下表:MySQL:从组中选择最后一个,但有条件,mysql,sql,select,group-by,Mysql,Sql,Select,Group By,我有下表: name created_for created_on status jen 2012-05-27 2012-02-15 12:14:09 Y joe 2012-10-01 2012-02-15 12:22:09 Y bob 2012-10-01 2012-02-15 12:47:09 N jim 2012-10-01 2012-02-24 12:47:09 N jim 2
name created_for created_on status
jen 2012-05-27 2012-02-15 12:14:09 Y
joe 2012-10-01 2012-02-15 12:22:09 Y
bob 2012-10-01 2012-02-15 12:47:09 N
jim 2012-10-01 2012-02-24 12:47:09 N
jim 2012-10-01 2012-02-29 12:47:09 Y
sam 2012-10-01 2012-03-11 12:47:09 N
sam 2012-10-01 2012-03-15 12:47:09 C
sam 2012-10-01 2012-03-22 12:47:09 Y
tom 2012-10-01 2012-04-10 12:47:09 N
tom 2012-10-01 2012-04-11 12:47:09 N
我想返回的是姓名的最后一行,为每个创建了2012-10-01日期的姓名的人创建的,但前提是最后一个条目的状态为N。因此,对于上表,我想返回:
name created_on
bob 2012-02-15 12:47:09
tom 2012-04-11 12:47:09
状态条件是什么让我抓狂。我似乎不知道在哪里放置“where status='N'”以获得正确的结果。尝试以下方法:
SELECT t1.*
FROM
(
SELECT name, MAX(created_on) MaxDate
FROM YourTableName
GROUP BY name
) t1 INNER JOIN YourTableName t2 on t1.name = t2.name
AND t1.MaxDate = t2.created_on
WHERE t2.created_for = '2012-10-01'
AND t2.status = 'N'
试试这个:
SELECT t1.*
FROM
(
SELECT name, MAX(created_on) MaxDate
FROM YourTableName
GROUP BY name
) t1 INNER JOIN YourTableName t2 on t1.name = t2.name
AND t1.MaxDate = t2.created_on
WHERE t2.created_for = '2012-10-01'
AND t2.status = 'N'
您当前使用的查询是什么?您当前使用的查询是什么?这适用于上表的子集,但只要我添加另一行,如:
bob 2012-10-04 2012-07-07 12:12:12 N
bob不再返回2012-10-01@mahmoud-gamal@Jim那是因为你添加的记录bob 2012-10-04 2012-07-0712:12:12 N
是否有created_for
字段=2012-10-04
not2012-10-01
由于条件其中t2.created_for='2012-10-01'
否,请再次查看。它不再返回2012-10-01的bob。对于我发布的表子集,它返回所需的2行。但是,如果我为Bob添加了一个日期更晚的添加行,则只返回1行。2012-10-01的bob行不再返回。这适用于上表的子集,但只要我添加另一行,如:bob 2012-10-04 2012-07-07 12:12:12 N
bob不再返回2012-10-01@mahmoud-gamal@Jim这是因为您添加的记录具有created_for
field=2012-10-04
not2012-10-01
由于条件WHERE t2.created_for='2012-10-01'
否,请再次查看。它不再返回2012-10-01的bob。对于我发布的表子集,它返回所需的2行。但是,如果我为Bob添加了一个日期更晚的添加行,则只返回1行。2012-10-01的bob行不再返回。