【问题标题】:MySQL: Select last from group, but with conditionsMySQL:从组中选择最后一个,但有条件
【发布时间】:2012-10-01 03:17:43
【问题描述】:

我有下表:

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

我要返回的是名称的最后一行,created_on 为每个 created_for 日期为 2012-10-01 的人,但仅当最后一个条目的状态为 N 时。所以对于上表,我想回去:

name     created_on
bob      2012-02-15 12:47:09
tom      2012-04-11 12:47:09

状态条件是什么让我失望。我似乎无法弄清楚在哪里放置“where status='N'”以获得正确的结果。

【问题讨论】:

  • 您当前使用的查询是什么?

标签: mysql sql select group-by


【解决方案1】:

试试这个:

 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-07 12:12:12 N 具有 created_for 字段 = 2012-10-04 而不是 2012-10-01 因为条件 WHERE t2.created_for = '2012-10-01' 而没有返回
  • 不,再看一遍。它不再返回 bob FOR 2012-10-01。使用我发布的表子集,它返回所需的 2 行。但是,如果我在较晚的日期为 Bob 添加该添加行,则仅返回 1 行。不再返回 2012-10-01 的 bob 行。
【解决方案2】:
select t.*
from MyTable t
inner join (
    select name, max(created_on) max_created_on
    from MyTable
    where created_for = '2012-10-01'
    group by name
) tm on t.name = tm.name and t.created_on = tm.max_created_on
where t.status = 'N'

SQL Fiddle Example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2021-04-08
    相关资源
    最近更新 更多