mysql - 按具有最大列的查询进行分组

标签 mysql sql

我想查询某个用户按聊天伙伴分组的最近聊天消息。我当前的查询有效,但是它选择用户自己的消息,这些消息按合作伙伴按时间戳排序进行分组。但我希望其他用户发送给该特定用户的最后一条消息按时间戳排序。

这是我的 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/

相关文章:

SQL Server - 停止或中断 SQL 脚本的执行

php - 迁移到 PHP 5.6 : Writing a MySQL wrapper

mysql - mysql中的类型问题

SQL AND 连接表中的列

mysql - 在我的 WHERE 子句条件中出现问题。 <> 和与或

sql - 使用动态创建的字符串向用户授予角色

mysql - SQL/mysql - 如何显示 1 个表中具有不同值的两列

mysql - PHP PDO 简洁的 mySQL SELECT 对象

mysql - 在每组行中执行操作

mysql选择不同的字母,包括扩展的拉丁字符