mysql - SQL选择用户的唯一列表,以及其他数据取决于时间戳

标签 mysql sql group-by distinct

我在 SQL 中有一个表,该表是这样的:

+-------------+---------------+-------------------------+
| quotes_user | email_address | ________Sent_at________ |
+-------------+---------------+-------------------------+
| user1       | email1        | 2012-10-09 12:23:53.253 |
| user1       | email2        | 2012-10-09 12:24:53.253 |
| user2       | email3        | 2012-10-09 13:20:53.253 |
| user2       | email4        | 2012-10-09 11:23:53.253 |
| user3       | email5        | 2012-10-08 10:29:53.253 |
| user3       | email6        | 2012-10-08 14:23:53.253 |
+-------------+---------------+-------------------------+

我要显示结果

+-------------+---------------+-------------------------+
| quotes_user | email_address | ________Sent_at________ |
+-------------+---------------+-------------------------+
| user1       | email2        | 2012-10-09 12:24:53.253 |
| user2       | email3        | 2012-10-09 13:20:53.253 |
| user3       | email6        | 2012-10-08 14:23:53.253 |
+-------------+---------------+-------------------------+

即我想选择唯一用户列表,以及与他们关联的最新电子邮件地址。

另一种解释问题的方法是,我想选择一个不包含在任何聚合函数或 order by 子句中的字段。我已经尝试了许多语句,其中包含 Distinct 和 Order By、Group By 等的大量排列,但都没有用。

我试图避免多重陈述。

请帮我解决这个问题。

最佳答案

查询背后的想法是为子查询中的每个 quotes_user 获取它们的最大 Sent_AT 并将其连接回原始表。

SELECT  a.*
FROM    tableName a INNER JOIN
        (
            SELECT  quotes_user, MAX(Sent_AT) maxSENT
            FROM tableName
            Group By quotes_user
        ) b on a.quotes_user = b.quotes_user AND
                a.Sent_AT = b.maxSent

SQLFiddle Demo

关于mysql - SQL选择用户的唯一列表,以及其他数据取决于时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813561/

相关文章:

mysql - 通过在单个查询中使用多个组

php - 将 API JSON 响应存储在 SQL 数据库中

mysql - SQL 从同一个表中选择列

SQL:查找行之间最长的公共(public)字符串

mysql - 检索每组中的最后一条记录 - MySQL

mysql - 需要帮助来计算最不同的书籍

php - 通过 POST 表单编辑 MySQL 行

mysql - 服务堆栈 OrmLite : Table field type when create table form c#

Mysql更改默认引擎

sql - Azure 逻辑应用 - 将 SQL 表发送到单个电子邮件 - 操作方法