![](/img/trans.png)
[英]How to select the lastest record from a group in MySQL table using SQl syntax
[英]how to select latest record from table by using Group by statements
我根據發件人ID從表和組中獲取聊天消息
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 joining
消息表本身,與謂語是相同的發送者,后來時間戳。 如果沒有更晚的時間戳,則第二個表中的結果將為空值,這意味着您已標識了最新消息。
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)
並將結果返回到message和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
這兩個查詢將為您提供相同的結果
您按日期順序選擇它。 ORDER BY messages.timestamp desc
SELECT sender.user_name sender, receiver.user_name receiver,MAX(messages.time) msgtime, messages.msg msg,sender.u_id u_id,sender.user_name user_name
FROM messages
INNER JOIN user AS sender
ON messages.sender = sender.u_id
INNER 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
首先從此查詢中選擇最近的味精
SELECT sender, receiver, MAX(time) AS Most_Recent
FROM Messages WHERE receiver = receiverid(userid that receive this msg) GROUP BY sender
知道此查詢根據最近的發件人味精給組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.