MySQL查询基于最高值,但列是VARCHAR

时间:2017-10-06 10:36:56

标签: php mysql

在这里遇到一些问题。我们有一个系统可以跟踪我们的网站托管,并且我已经在这个已经存在的系统上开发了一个前端门户。

在数据库中,表格如下所示:

id | company_id | renewal | domain_name

以及MySQL数据库中的几个条目示例:

 1 | 5 | June 2014 | www.example.com
 2 | 5 | June 2015 | www.example.com
 3 | 5 | June 2016 | www.example.com
 4 | 5 | June 2017 | www.example.com
 5 | 5 | June 2018 | www.example.com
 6 | 5 | June 2014 | www.stackoverflow.com
 7 | 5 | June 2015 | www.stackoverflow.com
 8 | 5 | June 2016 | www.stackoverflow.com
 9 | 5 | June 2017 | www.stackoverflow.com
10 | 5 | June 2018 | www.stackoverflow.com

我希望SELECT * company_id = 5 - 这没有问题。然后,我想要显示renewal最高的所有域 - 基本上我想要返回:

 5 | 5 | June 2018 | www.example.com
10 | 5 | June 2018 | www.stackoverflow.com

获取独特的域名很简单,我已经通过GROUP BY(domain_name)实现了这一点,但我对renewal的排序一无所知,特别是因为它不是简单的int,而是一个组合。

1 个答案:

答案 0 :(得分:2)

我肯定会建议将此表转换为具有实际日期的内容,以便您对其进行排序。目前,您可以使用MySQL的STR_TO_DATE函数,它会尝试根据给定的格式解析日期。

这将是:

SELECT domain_name, MAX(STR_TO_DATE(renewal_date, '%M %Y')) AS max_renewal_date
FROM table
WHERE company_id = 5
GROUP BY domain_name