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等的大量排列,没有用.
我试图避免多个陈述.
这个你能帮我吗.
查询背后的想法是在子查询中获取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)
尝试这个:
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)
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |