【发布时间】:2015-02-24 01:38:28
【问题描述】:
对于使用分组最大值的查询真的很苦恼,任何帮助将不胜感激。如果我不应该使用分组最大值,请随时指出。
我有两张表application 和email,一个应用程序可以有很多电子邮件。我在查询中尝试做的是从应用程序中获取所有详细信息并加入电子邮件表(我实际上只是从电子邮件中获取另一个表的外键,指示电子邮件是否已被回复),获取最后一个基于最大值(时间戳)发送的电子邮件,这就是我尝试使用分组最大值的原因。
我已经尝试过了,但它似乎复制了每一行:
SELECT `application` . * , `email1`.`student_email_id` AS `email_student_email_id`
FROM `application`
LEFT JOIN (
SELECT MAX( tstamp ) AS tstamp, id, student_email_id, application_id
FROM email
GROUP BY id, student_email_id, application_id
) AS email1 ON `email1`.`application_id` = `application`.`id`
WHERE `application`.`status` = 'returned'
这似乎是一开始的工作,但现在引起了问题,我敢肯定这是相当草率的代码:
select `application`.*, `email1`.`student_email_id` as `email_student_email_id`
from `application`
left join (
select student_email_id, max(tstamp) as tstamp, application_id
from email
group by application_id, tstamp
order by tstamp desc
limit 1) as email1 on `email1`.`application_id` = `application`.`id`
where `application`.`status` = 'returned'
任何指导将不胜感激,如果您需要查看更多代码,请询问!谢谢。
如果需要我的数据库设置以及应该发生的事情(省略不重要的部分),请进一步说明:
Application Table
+----+----------+
| id | status |
+----+----------+
| 1 | returned |
+----+----------+
Email Table
+----+------------+----------------+------------------+
| id | tstamp | application_id | student_email_id |
+----+------------+----------------+------------------+
| 1 | 2014-12-26 | 1 | NULL |
| 2 | 2014-12-27 | 1 | 3 |
+----+------------+----------------+------------------+
查询应显示以下内容:
+----+----------+------------------------+
| id | status | email_student_email_id |
+----+----------+------------------------+
| 1 | returned | 3 |
+----+----------+------------------------+
上面的第一个解决方案显示了所有内容的重复项(也许我快到了),第二个解决方案显示连接表列的 null,尽管我确信它确实在一个阶段或至少单独工作!
【问题讨论】:
标签: mysql sql groupwise-maximum