我想查询某个用户按聊天伙伴分组的最近聊天消息。我当前的查询有效,但是它选择用户自己的消息,这些消息按合作伙伴按时间戳排序进行分组。但我希望其他用户发送给该特定用户的最后一条消息按时间戳排序。
这是我的 fiddle :Sqlfiddle
预期结果:2行
... message
--------------------
... r to me last
... m to me last
我已经准备好了聊天消息,时间戳最大的消息称为“x to me last
”
我当前的查询是:
SELECT A.*, DU.user as username, DU.photo, DU.city, DU.year, DU.month, DU.day
FROM db_chats A
INNER JOIN (
SELECT max(timestamp) ts, user, partner
FROM db_chats
GROUP BY partner) T
on A.timestamp=T.ts
and A.user=T.user
LEFT JOIN db_users DU on T.partner = DU.id
WHERE A.user = 'RGXiLkVpKGc4FSU7SeyMlZ7z' ORDER BY A.timestamp desc
最佳答案
您可以使用this查询得到结果:
select A.*, DU.user as username, DU.photo, DU.city, DU.year,
DU.month, DU.day from db_chats A, db_users DU where timestamp in
(select max(timestamp) from db_chats
where partner ="RGXiLkVpKGc4FSU7SeyMlZ7z" group by user)
and a.USER = DU.ID
order by timestamp desc
编辑
您的原始查询不起作用的原因是您的内部联接:
SELECT max(timestamp) ts, user, partner
FROM db_chats
GROUP BY partner
该查询的结果是:
| TS | USER | PARTNER |
|------------|--------------------------|--------------------------|
| 1414453415 | xAlX66JQfmsOcotg00wPsZfx | RGXiLkVpKGc4FSU7SeyMlZ7z |
| 1414453387 | RGXiLkVpKGc4FSU7SeyMlZ7z | xAlX66JQfmsOcotg00wPsZfx |
| 1414443546 | RGXiLkVpKGc4FSU7SeyMlZ7z | YZQF4hbvyjbS0p7wYIR2Hkq9 |
如果您检查 db_chats 表(如下),在这些时间戳中您找不到所需的消息。因此查询永远不会返回“r to me last”
| USER | PARTNER | MESSAGE | TIMESTAMP |
|--------------------------|--------------------------|--------------|------------|
| xAlX66JQfmsOcotg00wPsZfx | RGXiLkVpKGc4FSU7SeyMlZ7z | r to me | 1414443447 |
| YZQF4hbvyjbS0p7wYIR2Hkq9 | RGXiLkVpKGc4FSU7SeyMlZ7z | m to me | 1414442845 |
| YZQF4hbvyjbS0p7wYIR2Hkq9 | RGXiLkVpKGc4FSU7SeyMlZ7z | m to me last | 1414453415 |
| RGXiLkVpKGc4FSU7SeyMlZ7z | xAlX66JQfmsOcotg00wPsZfx | me to r | 1414453387 |
| RGXiLkVpKGc4FSU7SeyMlZ7z | YZQF4hbvyjbS0p7wYIR2Hkq9 | me to m | 1414443546 |
| xAlX66JQfmsOcotg00wPsZfx | RGXiLkVpKGc4FSU7SeyMlZ7z | r to me last | 1414453234 |
关于mysql - 按具有最大列的查询进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26606302/