gpt4 book ai didi

java - JPA,playframework,在分组依据之前选择顺序

转载 作者:行者123 更新时间:2023-11-30 04:58:19 25 4
gpt4 key购买 nike

如何在“JPA”中编写查询会在 GROUP BY 之前进行 ORDER BY 吗?

例如:

select m from Message m where m.id = (
select distinct m2.conversation_id
from Message m2
where m2.from = 100 or m2.to = 100
)
group by m.conversation_id order by m.date desc

我想要每个对话 ID 的最后(最新)消息。

最佳答案

简单来说,不能将 ORDER BY 放在 GROUP BY 之前; SQL 需要在 GROUP BY 之后添加 ORDER BY。

但是,您可以实现所需的结果 - 使用下面的冗长方法或使用不同的 ORDER BY 子句构建查询:

ORDER BY m.conversation_id, m.date DESC

在从数据库获取数据的代码中,您为返回的每个新对话 ID 选择第一行。

一如既往,我分阶段构建查询。首先,查找涉及“用户 ID 100”的每个对话 ID 的最新消息时间戳:

SELECT m2.conversation_id, MAX(m2.date) AS date
FROM Message AS m2
WHERE m2.from = 100 OR m2.to = 100
GROUP BY m2.conversation_id

现在,将其与原始表连接起来以获得感兴趣的行:

SELECT m1.*
FROM Message AS m1
JOIN (SELECT m2.conversation_id, MAX(m2.date) AS date
FROM Message AS m2
WHERE m2.from = 100 OR m2.to = 100
GROUP BY m2.conversation_id
) AS m3
ON m1.conversation_id = m3.conversation_id AND m1.date = m3.date
ORDER BY m1.date DESC;

关于java - JPA,playframework,在分组依据之前选择顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779795/

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