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

时间:2014-07-03 09:49:27

标签: mysql sql

我的表格validfrom以及validto03JUL2014所有类型都是DATE,而不是STRING)< / p>

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

2 个答案:

答案 0 :(得分:2)

在你的查询中你写MAX(validto)然后它只返回那个有效值为max的行

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

答案 1 :(得分:0)

首先找到给定时间范围内每种类型的最大日期。然后再次加入你的桌子以获得完整的记录。

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)之外,您还可以从表中获得随机类型和随机有效值,因为您没有指定要查看的类型和有效值(最小值,最大值或平均值)。 (除了validto >= 03JUL2014应该会给你一个语法错误。我很惊讶它显然没有。我不知道,MySQL如何解释这里。)