msg_id msg(messages) sender(user id) receiver (user id) time (timestamp)
------------------------------------------------------------------------------
1 hello bro 1 2 12am
2 hello 2 1 12am
3 i disscuss something 1 2 12:01am
4 are you free 1 2 12:03am
-----------------------------------------------------
**User Table**
-----------------------------------------------------
u_id user_name
1 khalid
2 brain
3 abdullah
SELECT sender.user_name sender, receiver.user_name receiver,
messages.time msgtime, messages.msg msg,sender.u_id u_id,
sender.user_name user_name FROM messages LEFT JOIN user
AS sender ON messages.sender = sender.u_id LEFT JOIN user
AS receiver ON messages.receiver = receiver.u_id where
sender.u_id<>1 group by messages.sender ORDER BY
messages.msg_id desc
我想要的
我想查询显示每个发件人的最新最后消息
您可以在根本不分组的情况下做到这一点--只需left将
消息表连接到自身,谓词是相同的发件人,然后是时间戳。如果没有稍后的时间戳,那么第二个表中的值将为null,这意味着您已经标识了最近的消息。
select s.user_name as `from`, r.user_name as `to`, m1.msg, m1.time
from messages m1
left join messages m2
on m1.time < m2.time and m1.sender = m2.sender
inner join users s
on m1.sender = s.u_id
inner join users r
on m1.receiver = r.u_id
where m2.sender is null;
如果您绝对想使用group by
,您可以首先找到每个发件人的max(time)
,然后将结果连接回messages and users表,如下所示:
select s.user_name as `from`, r.user_name as `to`, m.msg, m.time
from messages m
inner join users s
on m.sender = s.u_id
inner join users r
on m.receiver = r.u_id
inner join (
select sender, max(`time`) as ts
from messages
group by sender
) q on m.sender = q.sender and m.time = q.ts
这两个查询将给出相同的结果
问题内容: 我有一张桌子,上面有几条记录。有一个ID字段。我想选择具有最新ID(即最高ID)的记录。 有任何想法吗? 问题答案:
问题内容: 我将对各种rpc调用的响应存储在具有以下字段的mysql表中: 为和的所有现有组合选择最新响应的最佳方法是什么? 对于每个日期,对于给定的方法/ ID,只能有一个响应。 并非所有呼叫组合在给定日期都必须存在。 有数十种方法,数千个ID和至少365个不同的日期 样本数据: 所需结果: (我不认为这是同一个问题-它不会给我最新的信息) 问题答案: 自我回答,但是随着表的增长,我不确定这是否
问题内容: 我继承了具有以下结构的表: 是一个标识字段和主键,并且and字段上有非唯一索引。 什么是最有效的方式来获得每个项目名称的最新记录,即在上述行的表 1 , 4 和 6 ,因为他们是最先进的日期项物品应归还 一 , 乙 和 Ç 分别。 问题答案: SQL Server 2005(开始):
问题内容: 我试图选择一个表中的最后6个月的条目,我有一列称为datetime,这是一种datetime mysql格式。 我已经看到许多使用间隔和其他方法的方法-应该使用哪种方法?谢谢 问题答案: 使用DATE_SUB
问题内容: 可以说在employee表中,我在表的列上创建了一个索引(idx_name)。 我是否需要在select子句中明确指定索引名称,否则它将自动用于加速查询。 如果需要在select子句中指定,在select查询中使用index的语法是什么? 问题答案: 如果要测试索引以查看其是否有效,请使用以下语法: WITH语句将强制使用索引。
我有两个下拉列表,我想在它们被选中后使用它们。我想在选择的基础上弹出另一个框来显示信息。当我尝试使用if语句并按下ok按钮时,它只是继续到下一行。我从一个showMessage对话框开始,但我想在一些下拉选项中显示警告。它不起作用。我还需要能够循环返回主菜单,以便他们可以做出不同的选择。 我现在拥有的例子: