ORDER BY然后GROUP BY日期时间值

时间:2013-10-25 14:07:38

标签: mysql sql group-by sql-order-by

我有以下MySQL查询:

SELECT t.date_time, COUNT(t.submission_id) AS click_count, s.title, s.first_name, s.family_name, s.email, ut.ukip_name, a.advertiser_name 
FROM recards.tracking t 
INNER JOIN submissions s ON t.submission_id = s.submission_id 
INNER JOIN form_settings fs ON t.form_id = fs.form_id 
INNER JOIN advertisers a ON t.advertiser_id = a.advertiser_id 
INNER JOIN db2829.ukip_titles ut ON fs.ukip_title_id = ut.ukip_title_id
WHERE t.advertiser_id = 621 
GROUP BY t.submission_id 
ORDER BY t.date_time DESC

然而,当然,因为ORDER BY是在GROUP BY之后完成的,所以我只获得了第一条记录,而我需要的是最后一条记录。在调查中,我了解到在MAX()期间在列上使用SELECT,但这不适用于datetime类型。

还有其他的解决方法吗?也许在SELECTs中嵌入SELECTs?不幸的是,我的上述内容是关于MySQL知识的内容!

2 个答案:

答案 0 :(得分:1)

原来我只是忘记AS之后的MAX()MAX(t.date_time) AS top_time它可以正常工作。

我的完整查询工作:

SELECT MAX(t.date_time) AS top_time, COUNT(t.submission_id) AS click_count, s.title, s.first_name, s.family_name, s.email, ut.ukip_name, a.advertiser_name 
FROM recards.tracking t 
INNER JOIN submissions s ON t.submission_id = s.submission_id 
INNER JOIN form_settings fs ON t.form_id = fs.form_id 
INNER JOIN advertisers a ON t.advertiser_id = a.advertiser_id 
INNER JOIN db2829.ukip_titles ut ON fs.ukip_title_id = ut.ukip_title_id
WHERE t.advertiser_id = 621 
GROUP BY t.submission_id 
ORDER BY top_time DESC

答案 1 :(得分:0)

您只是按t.submission_id进行分组而不是其他任何内容,因此此查询将无效。其他属性需要添加到GROUP BY或需要从SELECT中删除。

根据排序,将MAX(t.date_time)MIN(t.date_time)添加到您的SELECT,然后将ORDER BY添加到升序或降序。