繁体   English   中英

如何在mysql表中选择所有大于日期的记录?

[英]How to select all records greater than a date in mysql table?

我的表格:(以下的 validfromvalidto以及03JUL2014均为DATE类型,而不是STRING

id   type    validfrom    validto 
-------------------------------------
1   "APPLE"   10MAY2011    15APR2012
1   "APPLE"   19APR2012    15APR2017
1   "ORANGE"   10MAY2011    15APR2012
1   "ORANGE"   19APR2012    15AUG2018
1   "PEAR"   10MAY2012    15APR2013
1   "PEAR"   10MAY2011    15APR2018
2   "APPLE"   10MAY2011    15APR2017
2   "APPLE"   10MAY2011    15APR2012
2   "ORANGE"   10MAY2011    15APR2012
2   "ORANGE"   10MAY2011    15APR2015
2   "ORANGE"   10MAY2007    15APR2019
2   "PEAR"   10MAY2003    15APR2012
2   "PEAR"   10MAY2006    15APR2022

我想检索id2validto大于03JUL2014所有记录。

因此,我必须得到:

2   "APPLE"   10MAY2011    15APR2017
2   "ORANGE"   10MAY2007    15APR2019
2   "PEAR"   10MAY2006    15APR2022

我试过了:

SELECT type, validfrom, MAX(validto) FROM crew_qualifications 
               WHERE id=2 AND validto >= 03JUL2014

它只给了我:

2   "PEAR"   10MAY2006    15APR2022

在您的查询中,您写入MAX(validto),然后仅返回有效值为max的那些行

您删除MAX(validto),然后返回正确的ans

首先找到给定时间范围内每种类型的最大日期。 然后再次与您的表一起获取完整的记录。

select cq.type, cq.validfrom, cq.validto
from crew_qualifications cq
join
(
  select type, max(validto) as validto
  from crew_qualifications 
  where validto >= '2014-07-03'
  group by type
) wanted_cq
on wanted_cq.type = cq.type and wanted_cq.validto = cq.validto;

关于您的查询:您选择不带组的MAX(validto),以便获得整个表(即一条记录)的MAX(validto)。 除了未指定要查看的类型和有效值(最小值,最大值或平均值)之外,还从表中获得了MAX(validto)随机类型和有效validfrom。 (除了validto >= 03JUL2014应该会给您一个语法错误。我很惊讶它显然没有。我不知道,MySQL在这里是如何解释的。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM