Mysql 表达式位于group by中的Sql语句

Mysql 表达式位于group by中的Sql语句,mysql,sql,Mysql,Sql,我有一个关于mysql数据库的sql语句的问题。我有一个表,表中有以下列:- sender_id | receiver_id | content | dateAndTime 如您所知,我希望实现在用户之间发送消息。我想与每个用户一起选择最后一条消息(无论发送还是接收)。类似于facebook上的信息。我想如果可能的话,我应该在小组中使用expression by,但我想看看你们的意见。谢谢 为此,您的字段dateAndTime必须是日期时间类型 SELECT * FROM TABLE ORDE

我有一个关于mysql数据库的sql语句的问题。我有一个表,表中有以下列:-

sender_id | receiver_id | content | dateAndTime

如您所知,我希望实现在用户之间发送消息。我想与每个用户一起选择最后一条消息(无论发送还是接收)。类似于facebook上的信息。我想如果可能的话,我应该在小组中使用expression by,但我想看看你们的意见。谢谢

为此,您的字段
dateAndTime
必须是日期时间类型

SELECT * FROM TABLE ORDER BY dateAndTime DESC

您可以使用此降序检索最新数据。

假设您有一个“用户”表,并且您声明的表名为“mytable”,您可以:

select users.id,mytable.content, MAX(mytable.dateAndTime) as date 
from users join mytable 
on users.id = mytable.sender_id 
or users.id = mytable.receiver_id 
group by users.id, mytable.content, date 
max函数只保留由group by生成的每个组的最新日期

编辑:试试这个

select users.id, mytable.content, mytable.dateAndTime
from users join mytable 
on users.id = mytable.sender_id 
or users.id = mytable.receiver_id
where mytable.dateAndTime = (select max(t.dateAndTime) from mytable as t where t.receiver_id = users.id or t.sender_id = users.id) 
试试这个

SELECT C.ID, T.content, T.dateAndTime FROM T JOIN
(
SELECT ID, MAX(dateAndTime) 'last' FROM
(
SELECT sender_id 'ID', content, dateAndTime FROM T
UNION
SELECT receiver_id 'ID', content, dateAndTime FROM T
) B
GROUP BY ID
) C
WHERE T.dateAndTime = C.last AND (T.sender_id = C.ID OR T.receiver_id = C.ID)

但这将返回按日期排序的所有邮件。我只想要每个用户的最后一封邮件。用户是指发件人还是收件人?我有当前记录的用户id。我想为此用户id选择与其他每个人的最后一封邮件。所以在某些情况下,我的用户id将是其他接收者id中的发送者id。每当用户发送消息时,其他用户都会收到它。那么你需要发送方和接收方的结果吗?@unknown op已经解释过了。OP想要与每个用户关联的最后一条消息,不管它是发送的还是接收的。我没有尝试过,但我很确定这不会起作用。由于聚合函数中只有mytable.dateAndTime,GROUP BY子句中缺少几列。即使添加所有其他列,也会得到错误的结果,因为所有行对于其整个内容都是唯一的。lol同意第一部分,回答得太快;不同意第二部分的想法,但编辑后的答案会返回每个人按日期排序的所有消息。我只想为每个人发送最后一条消息。@user1107922您能分享一下错误吗?(刚刚再次编辑,请立即尝试)您可以在这里@user1107922检查我的解决方案,您有很多问题,只有部分问题接受了答案。你能接受一些答案或封闭的问题吗?