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

Sun*_*pta 5 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 |
+-------------+---------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

我希望结果显示出来

+-------------+---------------+-------------------------+
| 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 |
+-------------+---------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

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

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

我试图避免多个陈述.

这个你能帮我吗.

Joh*_*Woo 7

查询背后的想法是在子查询中获取Sent_AT每个quotes_user子查询的最大值并将其连接回原始表.

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
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示


Mah*_*mal 1

尝试这个:

SELECT t2.quotes_user, t2.email_address, t2.Sent_at AS '________Sent_at________'
FROM
(
   SELECT quotes_user, MAX(Sent_at) AS MaxDate
   FROM Table 
   GROUP BY quotes_user
) t1
INNER JOIN Table t2 ON  t1.quotes_user = t2.quotes_user 
                    AND t1.Sent_at = t2.MaxDate
Run Code Online (Sandbox Code Playgroud)