带有表达式的Sql语句

时间:2014-03-01 18:00:11

标签: mysql sql

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

sender_id | receiver_id | content | dateAndTime

如您所知,我希望在用户之间实现发送消息。我想为每个用户选择最后一条消息(无论是发送还是接收)。像Facebook中的消息。我想如果可能的话我应该在group by中使用表达式但是我想看看你的意见我应该怎么做。谢谢!

3 个答案:

答案 0 :(得分:0)

出于这种目的,您的字段dateAndTime必须是日期时间类型。

SELECT * FROM TABLE ORDER BY dateAndTime DESC

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

答案 1 :(得分:0)

试试这个

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)

答案 2 :(得分:-1)

假设您有一个'用户'表,并且您所说的表名为'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函数将仅保留组生成的每个组的最新日期

编辑:试试这个

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)