私信  •  关注

Steve Kass

Steve Kass 最近创建的主题
Steve Kass 最近回复了
15 年前
回复了 Steve Kass 创建的主题 » 如何在mysql中创建只显示最后一行的组?[重复]

这里有两个建议。首先,如果mysql支持row_number(),那么很简单:

WITH Ranked AS (
  SELECT Id, Name, OtherColumns,
    ROW_NUMBER() OVER (
      PARTITION BY Name
      ORDER BY Id DESC
    ) AS rk
  FROM messages
)
  SELECT Id, Name, OtherColumns
  FROM messages
  WHERE rk = 1;

我猜你说的“最后一个”是指身份顺序上的最后一个。如果没有,请相应地更改row_number()窗口的ORDER BY子句。如果row_number()不可用,这是另一个解决方案:

其次,如果没有,这通常是一个很好的方法:

SELECT
  Id, Name, OtherColumns
FROM messages
WHERE NOT EXISTS (
  SELECT * FROM messages as M2
  WHERE M2.Name = messages.Name
  AND M2.Id > messages.Id
)

换言之,选择没有相同名称的后续id消息的消息。