【问题标题】:MySQL group by a certain type and select the latest row?MySQL按某种类型分组并选择最新行?
【发布时间】:2011-07-14 13:21:34
【问题描述】:

想象一个包含类型、日期、消息列的表格。有些行看起来像这样(类型|日期|消息):

1 | 1310572318 | Hello
1 | 1310572317 | Hi
2 | 1310572315 | Wassup
3 | 1310572312 | Yo
3 | 1310572311 | Hey
3 | 1310572309 | Eyo
1 | 1310572305 | Hello
1 | 1310572303 | Good Day

是否可以按类型对它们进行分组,然后选择最新的(按日期排序),结果将是:

1 | 1310572318 | Hello
2 | 1310572315 | Wassup
3 | 1310572312 | Yo
1 | 1310572305 | Hello

我很确定我必须使用一些 MySQL 聚合函数,但我不太擅长它们,所以我在这里寻求一点帮助。

【问题讨论】:

  • 要么你的结果是错误的(你两次都输入“1”)要么你的描述不正确。
  • 是的,我的意图是多次写“1”。你看,类型可以随时随地出现。
  • 他的意思是您在 结果(第 4 行)中有多个 type=1。这与您的描述不一致(按类型分组)。

标签: mysql group-by aggregate


【解决方案1】:

没有任何aggregate 可以使用不同的列,以便您可以获取最新日期的消息。

这可能会有所帮助:

SELECT 
    `type`, 
    MAX(`date`) AS `max_date`, 
    (SELECT `t2`.`message` FROM `table` AS `t2` WHERE `t2`.`type` = `t1`.`type` ORDER BY `t2`.`date` DESC LIMIT 1)
FROM `table` AS `t1`
GROUP BY `type`

【讨论】:

    【解决方案2】:

    请尝试:

    Select type, date, message from tableName
    group by type
    having min(date)
    

    请注意,最后一行无效

     1 | 1310572305 | Hello
    

    【讨论】:

      【解决方案3】:

      假设您的日期像您在此处显示的那样表示为整数,您可以尝试以下操作:

      SELECT type, MAX(date), message
      FROM myDB.myTable
      GROUP BY type;
      

      除非我在这里遗漏了一些基本的东西,否则这应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2017-01-09
        • 2015-09-08
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        相关资源
        最近更新 更多