我有一个这样的示例数据库,其中,id始终是唯一的,但user_id不是唯一的。
ID,USER_ID,消息,msg_datetime
来自u1的111,u1,msg,此处存在的时间
来自u2的112,u2,msg,此处存在的时间
来自u3的113,u3,msg,这里有时间
来自u2的114,u2,msg,此处存在的时间
来自u7的115,u7,msg,时间在这里
来自u2的116,u2,msg,此处存在的时间
来自u1的117,u1,msg,此处存在的时间
来自u5的118,u5,msg,这里的时间
所以我想只抓取那些已通过msg_datetime在DESC中发送消息并对其进行排序的唯一用户。
这是我的查询。
select id,DISTINCT user_id,msg_datetime ORDER BY msg_datetime DESC
但我收到的错误是:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT
。这有什么帮助吗?我试图实现的正确语法是什么?
我想为每个用户只显示一个条目,我显示的ID与每个用户只有1个无关。
答案 0 :(得分:1)
如果您不关心具有相同user_id查询的哪条记录应该返回,那么
SELECT id,user_id,msg_datetime FROM table_1 GROUP BY user_id ORDER BY msg_datetime DESC
如果要显示每个用户的最后一条记录,则需要
SELECT a.user_id, a.last_time, b.id
FROM
(SELECT user_id, MAX(msg_datetime) as last_time
FROM table1)a
INNER JOIN table1 b ON (b.user_id = a.user_id AND b.msg_datetime = a.last_time)
ORDER BY a.last_time;
答案 1 :(得分:0)
SELECT语法:
SELECT (fieldlists)
FROM (table)
[WHERE (conditions)]
ORDER BY (something)
你忘了说想要从哪个表中获取数据。
答案 2 :(得分:0)
你误解了DISTINCT的工作原理。它适用于行而非字段。你想要的是分组最大值,也称为每组最大n。
这是在MySQL中实现它的一种方法:
SELECT id, user_id, message, msg_datetime
FROM (
SELECT
id, user_id, message, msg_datetime,
@rn := CASE WHEN @prev_user_id = user_id
THEN @rn + 1
ELSE 1
END AS rn,
@prev_user_id := user_id
FROM (SELECT @prev_user_id := NULL) vars, Table1 T1
ORDER BY user_id, msg_datetime DESC
) T2
WHERE rn = 1
ORDER BY msg_datetime