【发布时间】:2013-11-27 12:25:18
【问题描述】:
我想选择一个包含特定用户的非重复记录列表(在user_to 或user_from 中)。我想检索其他用户以及该记录中的最新内容。该列表不得在所选的其他用户中重复。
例如,我有以下一组记录
id user_to user_from content time
1 1 2 ABC 2013-11-05
2 4 2 BBC 2013-11-06
3 3 1 CBC 2013-11-07
4 5 1 ABC 2013-11-08
5 1 2 AAC 2013-11-09
6 5 1 ABB 2013-11-10
7 3 4 CBC 2013-11-11
8 1 2 ACC 2013-11-12
在这种情况下,如果要提供的参数是1,我想选择记录3,6,8,其他的没有被选择,因为它们是重复的和旧的,或者它们不涉及1。
我查看了this post 并尝试了这样的事情:
SELECT u, content, date FROM(
(SELECT
user_from AS u,
MAX(time) AS date,
content
FROM t1
WHERE user_to = :user
)
UNION
(SELECT
user_to AS u,
MAX(time) AS date,
content
FROM t1
WHERE user_from = :user
)
) t2
WHERE date IN (SELECT MAX(date) FROM t2 GROUP BY u)
但是不,做不到。
知道如何编写查询吗?谢谢!
【问题讨论】:
-
为什么不是 4 注册表而不是 3?因为你说要么是重复的,要么是旧的,但旧的是 3 而不是 4!
-
我的意思是(它们是重复的并且更旧)或者(它们不涉及 1)。记录 4 涉及另一个用户 5(作为 user_to),它在 6 中有更新的记录。记录 3 涉及没有更新记录的用户 3。很抱歉造成混乱。
-
即使您编辑了您想要的数据也不适合显示的示例示例。如果您想要用户 1(从和到)且不重复且是最大日期的所有内容,则结果应为:3、4、6 和 8。请查看您的数据。
-
更好的 3、4、5、6 和 8。在此处查看:sqlfiddle.com/#!2/198d1e/8
-
不应选择记录 4,因为有更新的记录 6 也涉及用户 5。不应选择记录 5,因为有更新的记录 8 也涉及用户 2。我想选择对方的用户(所以如果 1 是 user_to,我想要 user_from,如果 1 是 user_from,我想要 user_to),因此,你可以在我的原始 sql 中看到,我有两个具有相同别名 u 的查询的联合
标签: mysql select group-by distinct union