gpt4 book ai didi

MySQL 查询从涉及 2 列的每个组中获取最后一条记录

转载 作者:行者123 更新时间:2023-11-30 22:11:11 27 4
gpt4 key购买 nike

我正在编写一个 MySQL (MariaDB) 查询,以获取用户已从其收到消息的发件人列表。就像在 Facebook 收件箱中一样,我希望最近的发件人首先出现,我已经通过以下查询:

SELECT  DISTINCT user_id_s
FROM messages
WHERE id IN (
SELECT MAX(id)
FROM messages
WHERE user_id_r=390
GROUP BY user_id_s
)
order by id DESC

它似乎工作正常(不确定它是否适用于像一百万行这样的大记录?)。但真正的问题是,如果用户收到最后一条消息而不是最后一条回复,它只会按顺序获取。

例子:

用户 390 已按以下顺序收到来自以下用户的消息:

  1. 385
  2. 421
  3. 422
  4. 423
  5. 424
  6. 429
  7. 430
  8. 431

所以现在用户 431 是最新的并且出现在列表的顶部,但是如果用户 390 回复了用户 431,它会停留在底部,而我希望它根据上次交互出现在顶部。

我希望我解释得很好。

编辑:这是一个 SQL fiddle :http://sqlfiddle.com/#!9/82417/2

在此示例中,带有“573”的行 ID 应出现在顶部以替换行#572,结果的其余部分必须保持不变。同样,具有 user_id_s 的第二列应该在第一行给出“431”,就像现在一样。

最佳答案

“last”的定义:代替MAX(id),你需要

SELECT id
FROM messages
WHERE ...
ORDER BY last_replied DESC
LIMIT 1

缩放:参见 Groupwise Max .

关于MySQL 查询从涉及 2 列的每个组中获取最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40080453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com