【发布时间】:2016-06-06 10:25:15
【问题描述】:
这是一个很常见的情况,但我不确定我是否做错了什么。
TABLE POSTS [ ID, USER_ID, TOPIC_ID, TIME ]
我只想获取每个用户在 topic_id '1' 上的最后一篇文章
SELECT p.*
FROM
posts p,
(
SELECT user_id, max(time) mtime
FROM posts
WHERE topic_id = 1
GROUP BY user_id
) pm
WHERE
p.user_id = pm.user_id AND
p.time = pm.mtime
这是正确的吗?没有子查询有没有办法做到这一点?
是否可以选择通过 spring-data 查询获取这些数据,或者这只是 JDBC/存储过程?
【问题讨论】:
-
这是正确的 - 但始终使用显式 JOIN 语法
-
啊,我说得太早了。您需要在子查询的 SELECT 中包含 user_id,最佳实践要求您应该在 GROUP BY 中包含 topic_id(尽管在这种情况下并非绝对必要)
-
是的,我有点搞砸了从我的域到“帖子”的翻译,它应该是“SELECT user_id, max(time)”而不是“topic_id” - 已编辑
标签: mysql sql spring-data spring-data-jpa