簡體   English   中英

SELECT來自最后一個接收者的最后一條消息。 MySQL的

[英]SELECT Last messages from last receiver. mysql

我的桌子

id|receiver|sender|content|time
1 |   6    |  2   |  a    | 13:33
2 |   4    |  3   |  b    | 13:35
3 |   4    |  3   |  c    | 14:01
4 |   5    |  3   |  d    | 14:03
5 |   7    |  2   |  e    | 14:05
6 |   4    |  3   |  f    | 14:07

我的預期結果:

id|receiver|sender|content|time
6 |   4    |  3   |  f    | 14:07
3 |   4    |  3   |  c    | 14:01
2 |   4    |  3   |  b    | 13:35

目前我的方法:

SELECT * FROM `meassages`
  WHERE `sender` = 3 AND `receiver` IN (
    SELECT `receiver` FROM `messages` ORDER BY `time` DESC LIMIT 1
  ) ORDER BY `time` DESC

有沒有更簡單的方法?

盡管您的查詢看起來不錯,但它假定最后一條消息來自sender = 3 因此,最好在子查詢中有一個where

SELECT m.*
FROM messages m
WHERE m.sender = 3 AND 
      m.receiver = (SELECT m2.receiver
                    FROM messages m2
                    WHERE m2.sender = m.sender
                    ORDER BY m2.time DESC
                    LIMIT 1
                   )
ORDER BY m.time DESC;

使用=代替IN強調子查詢返回一行。 另外,我添加了表別名和限定的列名。

嘗試以下方法:

SELECT m1.* 
FROM `meassages` AS m1
INNER JOIN
(
   SELECT receiver, MAX(time) AS LatestTime
   FROM messages 
   group by receiver
) AS m2  ON m1.receiver = m2.receiver 
        AND m1.`time` = m2.LatestTime
WHERE m1.`sender` = 3;

內部查詢將為您提供每個接收者的最新時間,這應該是最后一個接收者。 然后,根據最近的時間再次加入該表,您將除去所有具有最新時間的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM