SQL REQUEST - 获取上次消息和上次日期以及所有用户号码的所有对话

时间:2016-10-20 15:19:20

标签: mysql sql

我有这样的结构:

 id | content         | phone      | date  | conversation_id
----+-------------------------------------------------------
  1 | hello monday    | 0634601825 | 1     | 1
  2 | hello tuesday   | 0768941578 | 2     | 1
  3 | hello wednesday | 0634601825 | 3     | 2

我正在尝试发出一个SQL请求,每个conversation_id返回一行,最后一条消息,每个消息的最后一个日期,最后是数字的连续。

我不知道为什么,这个请求不起作用:

        SELECT m1.conversation_id, MAX(m1.date), (
            SELECT m2.content
            FROM message m2
            WHERE m2.id = m1.id AND m2.date = MAX(m2.date)
        ) as content, (
            SELECT group_concat(DISTINCT m3.phone SEPARATOR ', ')
            FROM message m3
        ) as phones
        FROM message m1
        GROUP BY m1.conversation_id;

它会返回一个会话列表,其中包含最后一个日期,一个好的concat但不是最后一条消息。我知道为什么它不起作用,但找不到解决方案

3 个答案:

答案 0 :(得分:0)

 SELECT m0.id,m0.content,m0.phone,m0.date,m0.conversation_id
   FROM message AS m0
  LEFT JOIN
        message AS m1 
     ON m0.conversation_id = m1.conversation_id 
    AND m0.content = m1.content
    AND m0.phone = m1.phone
    AND m0.date > m1.date
  WHERE m1.conversation_id IS NULL;

答案 1 :(得分:0)

试试这个

SELECT id,content,phone,date,conversation_id
from message sd
WHERE sd.date in (SELECT max(date) from message sd1 group BY sd1.conversation_id)

结果是您的记录id = 2且id = 3

答案 2 :(得分:0)

SELECT a.conv_id, (
    SELECT b.content
    FROM message b
    WHERE a.conv_id = b.conv_id
    ORDER BY b.date DESC
    LIMIT 1
) as content, group_concat(phone SEPARATOR ', ') as phones, (
    SELECT c.date
    FROM message c
    WHERE a.conv_id = c.conv_id
    ORDER BY c.date DESC
    LIMIT 1
) as date
From message a
GROUP BY conv_id