我有这样的结构:
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但不是最后一条消息。我知道为什么它不起作用,但找不到解决方案
答案 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